356 lines
5.5 KiB
Markdown
356 lines
5.5 KiB
Markdown
# Functor Reference
|
|
|
|
Version -10.0.0
|
|
|
|
Each function, combinator, or definition should be documented here.
|
|
|
|
--------------------
|
|
|
|
## !-
|
|
|
|
"not negative"
|
|
|
|
(Function, Boolean Predicate)
|
|
|
|
Integer on top of stack is replaced by Boolean value indicating whether
|
|
it is non-negative.
|
|
|
|
N !-
|
|
----------- N < 0
|
|
false
|
|
|
|
N !-
|
|
---------- N >= 0
|
|
true
|
|
|
|
|
|
### Definition
|
|
|
|
0 >=
|
|
|
|
--------------------
|
|
|
|
## app1
|
|
|
|
"apply one"
|
|
|
|
(Combinator)
|
|
|
|
Given a quoted program on TOS and anything as the second stack item run
|
|
the program without disturbing the stack and replace the two args with
|
|
the first result of the program.
|
|
|
|
... x [Q] app1
|
|
---------------------------------
|
|
... [x ...] [Q] infra first
|
|
|
|
### Definition
|
|
|
|
nullary popd
|
|
|
|
### Discussion
|
|
|
|
Just a specialization of `nullary` really. Its parallelizable cousins
|
|
are more useful.
|
|
|
|
|
|
--------------------
|
|
|
|
## b
|
|
|
|
(Combinator)
|
|
|
|
Run two quoted programs
|
|
|
|
[P] [Q] b
|
|
---------------
|
|
P Q
|
|
|
|
### Definition
|
|
|
|
[i] dip i
|
|
|
|
### Derivation
|
|
|
|
[P] [Q] b
|
|
[P] [Q] [i] dip i
|
|
[P] i [Q] i
|
|
P [Q] i
|
|
P Q
|
|
|
|
### Discussion
|
|
|
|
This combinator comes in handy.
|
|
|
|
### Crosslinks
|
|
|
|
[dupdip](#dupdip)
|
|
[ii](#ii)
|
|
|
|
--------------------
|
|
|
|
## binary
|
|
|
|
(Combinator)
|
|
|
|
Run a quoted program using exactly two stack values and leave the first
|
|
item of the result on the stack.
|
|
|
|
... y x [P] binary
|
|
-----------------------
|
|
... A
|
|
|
|
### Definition
|
|
|
|
unary popd
|
|
|
|
### Discussion
|
|
|
|
Runs any other quoted function and returns its first result while
|
|
consuming exactly two items from the stack.
|
|
|
|
### Crosslinks
|
|
|
|
[nullary](#nullary)
|
|
[ternary](#ternary)
|
|
[unary](#unary)
|
|
|
|
--------------------
|
|
|
|
## ccons
|
|
|
|
(Function)
|
|
|
|
Given two items and a list, append the items to the list to make a new list.
|
|
|
|
B A [...] ccons
|
|
---------------------
|
|
[B A ...]
|
|
|
|
### Definition
|
|
|
|
cons cons
|
|
|
|
### Discussion
|
|
|
|
Does `cons` twice.
|
|
|
|
### Crosslinks
|
|
|
|
[cons](#cons)
|
|
|
|
--------------------
|
|
|
|
## cons
|
|
|
|
(Basis Function)
|
|
|
|
Given an item and a list, append the item to the list to make a new list.
|
|
|
|
A [...] cons
|
|
------------------
|
|
[A ...]
|
|
|
|
### Source
|
|
|
|
func(cons, [list(A), B|S], [list([B|A])|S]).
|
|
|
|
### Discussion
|
|
|
|
Cons is a venerable old function from Lisp. It doesn't inspect the item
|
|
but it will not cons onto a non-list. It's inverse operation is called
|
|
`uncons`.
|
|
|
|
### Crosslinks
|
|
|
|
[ccons](#ccons)
|
|
[uncons](#uncons)
|
|
|
|
--------------------
|
|
|
|
## i
|
|
|
|
(Basis Combinator)
|
|
|
|
Append a quoted expression onto the pending expression.
|
|
|
|
|
|
[Q] i
|
|
-----------
|
|
Q
|
|
|
|
### Source
|
|
|
|
combo(i, [list(P)|S], S, Ei, Eo) :- append(P, Ei, Eo).
|
|
|
|
### Discussion
|
|
|
|
This is probably the fundamental combinator. You wind up using it in all
|
|
kinds of places (for example, the `x` combinator can be defined as `dup i`.)
|
|
|
|
--------------------
|
|
|
|
## infra
|
|
|
|
(Combinator)
|
|
|
|
Accept a quoted program and a list on the stack and run the program with
|
|
the list as its stack. Does not affect the stack (below the list.)
|
|
|
|
... [a b c] [Q] infra
|
|
---------------------------
|
|
c b a Q [...] swaack
|
|
|
|
### Definition
|
|
|
|
swons swaack [i] dip swaack
|
|
|
|
|
|
### Discussion
|
|
|
|
This is one of the more useful combinators. It allows a quoted
|
|
expression to serve as a stack for a program, effectively running it in a
|
|
kind of "pocket universe". If the list represents a datastructure then
|
|
`infra` lets you work on its internal structure.
|
|
|
|
### Crosslinks
|
|
|
|
[swaack](#swaack)
|
|
|
|
--------------------
|
|
|
|
## nullary
|
|
|
|
(Combinator)
|
|
|
|
Run a quoted program without using any stack values and leave the first item of the result on the stack.
|
|
|
|
... [P] nullary
|
|
---------------------
|
|
... A
|
|
|
|
### Definition
|
|
|
|
[stack] dip infra first
|
|
|
|
### Derivation
|
|
|
|
... [P] nullary
|
|
... [P] [stack] dip infra first
|
|
... stack [P] infra first
|
|
... [...] [P] infra first
|
|
... [A ...] first
|
|
... A
|
|
|
|
### Discussion
|
|
|
|
A very useful function that runs any other quoted function and returns
|
|
it's first result without disturbing the stack (under the quoted
|
|
program.)
|
|
|
|
### Crosslinks
|
|
|
|
[unary](#unary)
|
|
[binary](#binary)
|
|
[ternary](#ternary)
|
|
|
|
--------------------
|
|
|
|
## ternary
|
|
|
|
(Combinator)
|
|
|
|
|
|
Run a quoted program using exactly three stack values and leave the first
|
|
item of the result on the stack.
|
|
|
|
... z y x [P] unary
|
|
-------------------------
|
|
... A
|
|
|
|
### Definition
|
|
|
|
binary popd
|
|
|
|
### Discussion
|
|
|
|
Runs any other quoted function and returns its first result while
|
|
consuming exactly three items from the stack.
|
|
|
|
### Crosslinks
|
|
|
|
[binary](#binary)
|
|
[nullary](#nullary)
|
|
[unary](#unary)
|
|
|
|
--------------------
|
|
|
|
## unary
|
|
|
|
(Combinator)
|
|
|
|
Run a quoted program using exactly one stack value and leave the first item of the result on the stack.
|
|
|
|
... x [P] unary
|
|
---------------------
|
|
... A
|
|
|
|
### Definition
|
|
|
|
nullary popd
|
|
|
|
### Discussion
|
|
|
|
Runs any other quoted function and returns its first result while
|
|
consuming exactly one item from the stack.
|
|
|
|
### Crosslinks
|
|
|
|
[binary](#binary)
|
|
[nullary](#nullary)
|
|
[ternary](#ternary)
|
|
|
|
--------------------
|
|
|
|
## uncons
|
|
|
|
(Basis Function)
|
|
|
|
Removes an item from a list and leaves it on the stack under the rest of
|
|
the list. You cannot `uncons` an item from an empty list.
|
|
|
|
[A ...] uncons
|
|
--------------------
|
|
A [...]
|
|
|
|
### Source
|
|
|
|
func(uncons, Si, So) :- func(cons, So, Si).
|
|
|
|
### Discussion
|
|
|
|
This is the inverse of `cons`.
|
|
|
|
### Crosslinks
|
|
|
|
[cons](#cons)
|
|
|
|
--------------------
|
|
|
|
## x
|
|
|
|
(Combinator)
|
|
|
|
[F] x
|
|
-----------
|
|
[F] F
|
|
|
|
### Definition
|
|
|
|
dup i
|
|
|
|
### Discussion
|
|
|
|
The `x` combinator ...
|
|
|