++add
Add
Produces the sum of a
and b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ 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
> (add 'a' 4)101
> (add 'a' 'b')195
> (add 0xc 0xf)27
> `@ux`(add 0xc 0xf)0x1b
++dec
Decrement
Decrements a
by 1
.
Accepts
a
is an atom
.
Produces
An atom
.
Source
++ dec~/ %dec|= a=@~_ leaf+"decrement-underflow"?< =(0 a)=+ b=0|- ^- @?: =(a +(b)) b$(b +(b))
Examples
> (dec 7)6
> (dec 0)! decrement-underflow! exit
> (dec 'b')97> `@t`(dec 'b')'a'
> (dec 0xc)11> `@ux`(dec 0xc)0xb
++div
Divide
Computes a
divided by b
without remainder.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ div~/ %div|: [a=`@`1 b=`@`1]^- @~_ leaf+"divide-by-zero"?< =(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
> (div 'ab' 'a')259> `@`'ab'25.185> `@`a97
> (div 0x9f 0x29)6
++dvr
Divide with remainder
Computes a
divided by b
, producing the quotient and the remainder.
Accepts
a
is an atom
.
b
is an atom
.
Produces
A cell of atoms
.
Source
++ dvr~/ %dvr|= [a=@ b=@]^- [p=@ q=@][(div a b) (mod a b)]
Examples
> (dvr 17 8)[p=2 q=1]
> (dvr 17 6)[p=2 q=5]
> (dvr 18 6)[p=3 q=0]
> (dvr 4 2)[p=2 q=0]
> (dvr 'ab 'a')[p=259 q=62]> `@`'a'97> `@`'ab'25.185
++gte
Greater-than/equal
Tests whether a
is greater than or equal to b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
A flag.
Source
++ gte~/ %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 flag.
Source
++ gth~/ %gth|= [a=@ b=@]^- ?!(lte a b)
Examples
> (gth 'd' 'c')%.y
> (gth ~h1 ~m61)%.n
> (gth 'steak' 'brisket')%.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 flag.
Source
++ lte~/ %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
> (lte 'a' 'b')%.y> `@`'a'97> `@`'b'98
> (lte 'abraham' 'bob')%.n
> (lte ~m61 ~h1)%.n
++lth
Less-than
Tests whether a
is less than b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
A flag.
Source
++ lth~/ %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
> (lth 'a' 'b')%.y> `@`'a'97> `@`'b'98
> (lth 'abraham' 'bob')%.n
++max
Maximum
Computes the greater of a
and b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ max~/ %max|= [a=@ b=@]^- @?: (gth a b) ab
Examples
> (max 10 100)100
> (max 10.443 9)10.443
> (max 1 1)1
> (max 'abraham' 'bob')30.787.873.400.840.801
> `@t`(max 'abraham' 'bob')'abraham'
> `@t`(max 'abraham' 'benjamin')'benjamin'
> `@dr`(max ~m6 ~h1)~h1
>`@ux`(max 0xe1 0x1e)0xe1
++min
Minimum
Computes the lesser of a
and b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ min~/ %min|= [a=@ b=@]^- @?: (lth a b) ab
Examples
> (min 10 100)10
> (min 10.443 9)9
> (min 1 1)1
> (min 'abraham' 'bob')6.451.042
> `@t`(min 'abraham' 'bob')'bob'
> `@t`(min 'abraham' 'benjamin')'abraham'
> `@dr`(min ~m6 ~h1)~m6
++mod
Modulus
Computes the remainder of dividing a
by b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ mod~/ %mod|: [a=`@`1 b=`@`1]^- @?< =(0 b)(sub a (mul b (div a b)))
Examples
> (mod 5 2)1
> (mod 5 5)0
> (mod 2 5)2
> (mod 40 20)0
> `@`'c'99>`@`'a'97> (mod 'c' 'a')2
++mul
Multiply
Multiplies a
by b
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ mul~/ %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
> `@`'a'97> `@`'b'98> (mul 'a' 'b')9.506
>`@ux`(mul 0x1f 0xe)0x1b2
++sub
Subtract
Subtracts b
from a
.
Accepts
a
is an atom
.
b
is an atom
.
Produces
An atom
.
Source
++ sub~/ %sub|= [a=@ b=@]~_ leaf+"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
> (sub 'c' 'a')2> `@`'c'99> `@`'a'97
> (sub 0x1f 0xe)17> `@ux`(sub 0x1f 0xe)0x11