// ** built-ins // stack ; pop {a } ; ; dup {a aa} ; ; swap {ab ba} ; ; jump {ab aba} ; ; pick {abc abca} ; ; nip {ab b} ; ; rot {abc bca} ; ; -rot {abc cab} ; ; tuck {ab bab} ; ; dupd {ab aab} ; ; swapd {abc bac} ; ; transp {abc cba} ; ; 2pop {ab}; ; 2dup {ab abab} ; ; 2swap {abcd cdab} ; // queue ; c\ [] <- ; ; c/ [] -> ; ; clear c\ c/ ; ; g\ {[] c\ ( } ; ; g/ {[] ) c/ } ; ; s/ g\ => ; ; s\ g\ <= cons 1 !. <- ; ; stack ( ; ; unstack <- ; ; queue ) ; ; unqueue -> ; // list ; unit {a [a]} ; ; pair {ab [ab]} ; ; car {[aA] a} ; ; cdr {[aA] A} ; ; cons {ab [a]b ,} ; ; uncons {[aA] aA} ; ; swons swap cons ; ; -cons |: cons |: ; ; -uncons |: uncons |: ; ; -swons swap -cons ; ; take [dup] dip ? #. ; ; -take [|:] dip take |: ; ; take_ [dup] dip ? 1 + #. -1 _. ; ; -take_ [|:] dip take_ |: ; ; drop [dup] dip ? _. ; ; -drop [|:] dip drop |: ; // predicates ; zero? dup 0 ~ swap ^: 0 swap _in | ; ; false? dup 0 ~ swap #: ~: | ; ; true? false? ~: ; ; vector? 4:: 0 < ; ; int? 4:: 1 = ; ; float? 4:: 2 = ; ; char? 4:: 3 = ; ; sym? 4:: 4 = ; ; dict? 4:: 5 = ; ; null? 4:: 6 = ; ; function? 4:: 7 = ; ; list? 4:: 0 = ; ; Int? 4:: -1 = ; ; Float? 4:: -2 = ; ; Char? 4:: -3 = ; ; Sym? 4:: -4 = ; // combinators ; i / ; ; slip => / <= ; ; dip swap slip ; ; if pair swap zero? @ / ; ; ifte {cte [e t] ( c infra* true? @ / } ; ; branch [] if ; ; infra {ap a @: [a p /] [s/ a <- p / s\] if} ; ; infra* infra |: *: ;