--- navhome: /docs --- # 1a: basic arithmetic ### `++add` Add Produces the sum of `a` and `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ add :: add ~/ %add |= [a/@ b/@] ^- @ ?: =(0 a) b $(a (dec a), b +(b)) Examples -------- > (add 2 2) 4 > (add 1 1.000.000) 1.000.001 > (add 1.333 (mul 2 2)) 1.337 *** ### `++dec` Decrement Decrements `a` by `1`. Accepts ------- `a` is an atom. Produces -------- An atom. Source ------ ++ dec :: decrement ~/ %dec |= a/@ ~| %decrement-underflow ?< =(0 a) =+ b=0 |- ^- @ ?: =(a +(b)) b $(b +(b)) Examples -------- > (dec 7) 6 > (dec 0) ! decrement-underflow ! exit *** ### `++div` Divide Computes `a` divided by `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ div :: divide ~/ %div |= [a/@ b/@] ^- @ ~| 'div' ?< =(0 b) =+ c=0 |- ?: (lth a b) c $(a (sub a b), c +(c)) :: Examples -------- > (div 4 2) 2 > (div 17 8) 2 > (div 20 30) 0 *** ### `++gte` Greater-than/equal Tests whether `a` is greater than a number `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- A boolean. Source ------ ++ gte :: greater-equal ~/ %gte |= {a/@ b/@} ^- ? !(lth a b) Examples -------- > (gte 100 10) %.y > (gte 4 4) %.y > (gte 3 4) %.n *** ### `++gth` Greater-than Tests whether `a` is greater than `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- A boolean. Source ------ ++ gth :: greater-than ~/ %gth |= {a/@ b/@} ^- ? !(lte a b) Examples -------- > (gth 'd' 'c') %.y > (gth ~h1 ~m61) %.n *** ### `++lte` Less-than/equal Tests whether `a` is less than or equal to `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- A boolean. Source ------ ++ lte :: less-equal ~/ %lte |= {a/@ b/@} |(=(a b) (lth a b)) :: Examples -------- > (lte 4 5) %.y > (lte 5 4) %.n > (lte 5 5) %.y > (lte 0 0) %.y *** ### `++lth` Less-than Tests whether `a` is less than `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- A boolean. Source ------ ++ lth :: less-than ~/ %lth |= {a/@ b/@} ^- ? ?& !=(a b) |- ?| =(0 a) ?& !=(0 b) $(a (dec a), b (dec b)) == == == Examples -------- > (lth 4 5) %.y > (lth 5 4) %.n > (lth 5 5) %.n > (lth 5 0) %.n *** ### `++max` Maximum Computes the greater of `a` and `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ max :: maximum ~/ %max |= {a/@ b/@} ^- @ ?: (gth a b) a b Examples -------- > (max 10 100) 100 > (max 10.443 9) 10.443 > (max 0 1) 1 *** ### `++min` Minimum Computes the lesser of `a` and `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ min :: minimum ~/ %min |= {a/@ b/@} ^- @ ?: (lth a b) a b Examples -------- > (min 10 100) 10 > (min 10.443 9) 9 > (min 0 1) 0 *** ### `++mod` Modulus Computes the remainder of dividing `a` by `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ mod :: remainder ~/ %mod |: [a=`@`1 b=`@`1] ^- @ ?< =(0 b) (sub a (mul b (div a b))) Examples -------- > (mod 5 2) 1 > (mod 5 5) 0 *** ### `++mul` Multiply Multiplies `a` by `b`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ mul :: multiply ~/ %mul |: [a=`@`1 b=`@`1] ^- @ =+ c=0 |- ?: =(0 a) c $(a (dec a), c (add b c)) Examples -------- > (mul 3 4) 12 > (mul 0 1) 0 *** ### `++sub` Subtract Subtracts `b` from `a`. Accepts ------- `a` is an atom. `b` is an atom. Produces -------- An atom. Source ------ ++ sub :: subtract ~/ %sub |= [a/@ b/@] ~| %subtract-underflow ^- @ ?: =(0 b) a $(a (dec a), b (dec b)) Examples -------- > (sub 10 5) 5 > (sub 243 44) 199 > (sub 5 0) 5 > (sub 0 5) ! subtract-underflow ! exit ***