nixos-config/lib/math.nix

71 lines
1.1 KiB
Nix

# Math subset.
{ pkgs, lib, self }:
rec {
/**
Returns the absolute value of the given number.
# Arguments
number
: The numerical value.
# Type
```
abs :: Number -> Number
```
# Examples
```nix
abs -4
=> 4
abs (1 / 5)
=> 0.2
```
*/
abs = number: if number < 0 then -(number) else number;
/**
Exponentiates the given base with the exponent.
# Arguments
base
: The base value.
exponent
: The exponent value.
# Type
```
pow :: Integer -> Integer -> Integer
```
# Examples
```nix
pow 2 3
=> 8
pow 6 4
=> 1296
```
*/
pow = base: exponent:
# Just to be a contrarian, I'll just make this as a tail recursive function
# instead lol.
let
absValue = abs exponent;
iter = product: counter: maxCount:
if counter > maxCount then
product
else
iter (product * base) (counter + 1) maxCount;
value = iter 1 1 absValue;
in if exponent < 0 then (1 / value) else value;
}