2n: Functional Hacks
+aftr
+aftrPair after.
+aftr first takes gate .a, producing a wet gate. The new wet gate then takes .b, producing the inverted pair of [b a]. This is the inverted version of +fore.
Accepts
.a is a gate, and the sample of +aftr.
.b is a gate, and the sample of (aftr a).
Produces
(pair b a).
Source
++ aftr |*(a=$-(* *) |*(b=$-(* *) (pair b a)))Examples
> =a (aftr @ud)
> `(a @t)`['foo' 42]
[p='foo' q=42]+cork
+corkCompose forward.
Call gate .a, then call gate .b with its product.
This is a wet gate that takes two gates and produces a new gate.
This is the inverse of +corl.
Accepts
.a is a gate.
.b is a gate.
Source
++ cork |*([a=$-(* *) b=$-(* *)] (corl b a))Examples
> ((cork dec |=(a=@ [a a])) 20)
[19 19]
> ((cork dec some) 20)
[~ u=19]+corl
+corlCompose backward.
Call gate .b, then call gate .a with its product.
This is a wet gate that takes two gates and produces a new gate.
This is the inverse of +cork.
Accepts
.a is a gate.
.b is a gate.
Source
++ corl
|* [a=$-(* *) b=$-(* *)]
=< +:|.((a (b))) :: type check
=+ c=+<.b
|@ ++ $ (a (b c))
--Examples
> ((corl |=(a=@ [a a]) dec) 20)
[19 19]> ((corl some dec) 20)
[~ u=19]+curr
+currRight curry.
Right-curry a gate, binding the tail of its sample
Accepts
.a is a gate.
.c is a $noun.
Produces
A gate.
Source
++ curr
|* [a=$-(^ *) c=*]
=+ b=+<+.a
|@ ++ $ (a b c)
--Examples
> =tep (curr scan sym)
> `@t`(tep "asd")
'asd'
> `@t`(tep "lek-om")
'lek-om'+cury
+curyCurry left.
Curry a gate, binding the head of its sample.
Accepts
.a is a gate.
.b is a $noun.
Produces
A gate.
Source
++ cury
|* [a=$-(^ *) b=*]
=+ c=+<+.a
|@ ++ $ (a b c)
--Examples
> =mol (cury add 2)
> (mol 4)
6
> (mol 7)
9+fore
+forePair before.
+fore first takes gate .a, producing a wet gate. The new wet gate then takes .b, producing the pair of [a b].
Accepts
.a is a gate, and is the sample of +fore.
.b is a gate, and is the sample of (fore a).
Produces
(pair a b).
Source
++ fore |*(a=$-(* *) |*(b=$-(* *) (pair a b)))Examples
> =a (fore @ud)
> `(a @t)`[42 'foo']
[p=42 q='foo']+head
+headGet head.
Produces the head of a cell.
Accepts
A cell.
Produces
A $noun.
Source
++ head |*(^ ,:+<-)Examples
> (head [1 2])
1> (head [[1 1] 2])
[1 1]> (head "hello")
'h'+same
+sameIdentity.
Produces the same value that it was given.
Accepts
A $noun.
Produces
A $noun.
Source
++ same |*(* +<)Examples
> (same [1 2])
[1 2]> (same [[1 1] 2])
[[1 1] 2]> (same "hello")
"hello"+succ
+succSuccessor.
Increment an $atom.
Accepts
An $atom.
Produces
An $atom.
Source
++ succ |=(@ +(+<))Examples
> (succ 1)
2+tail
+tailGet tail.
Produces the tail of a cell.
Accepts
A cell.
Produces
A $noun.
Source
++ tail |*(^ ,:+<+)Examples
> (tail [1 2])
2> (tail [[1 1] 2])
2> (tail "hello")
"ello"+test
+testTest for equality.
Checks if a and b are equal, producing a $flag.
Accepts
a is a $noun.
b is a $noun.
Produces
A $flag.
Source
++ test |=(^ =(+<- +<+))Examples
> (test 1 1)
%.y> (test [2 0] 2)
%.n> (test "hello" 'hello')
%.n> (test "hello" ['h' 'e' 'l' 'l' 'o' ~])
%.y+lead
+leadPut head.
(lead a) produces a wet gate, then ((lead a) b) produces [a b].
Accepts
a is a $noun, and is the sample of +lead.
b is a $noun, and is the sample of ((lead a) b)
Produces
A cell of [a b].
Source
++ lead |*(* |*(* [+>+< +<]))Examples
> =a (lead 'foo')
> (a 'bar')
['foo' 'bar']+late
+latePut tail.
(late a) produces a wet gate, then ((late a) b) produces the inverted cell [b a]. This is the inverted version of +lead.
Accepts
a is a $noun, and is the sample of +late.
b is a $noun, and is the sample of (late a).
Produces
A cell of [b a].
Source
++ late |*(* |*(* [+< +>+<]))Examples
> =a (late 'foo')
> (a 'bar')
['bar' 'foo']Last updated