Most of the G's.

This commit is contained in:
Simon Forman 2022-03-25 12:39:03 -07:00
parent 4e7c0e3c04
commit 463d7eb9ae
9 changed files with 745 additions and 813 deletions

View File

@ -10,10 +10,7 @@ them with a Boolean value.
a b eq a b eq
------------- -------------
Boolean Boolean
(a = b)
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks

View File

@ -2,28 +2,16 @@
## gcd ## gcd
Basis Function Combinator Function
true \[tuck mod dup 0 \>\] loop pop Take two integers from the stack and replace them with their Greatest
Common Denominator.
Gentzen diagram.
### Definition ### Definition
if not basis. > true \[[tuck] [mod] [dup] 0 [>]\] [loop] [pop]
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. Euclid's Algorithm
### Crosslinks
Lorem ipsum.

View File

@ -2,28 +2,15 @@
## gcd2 ## gcd2
Basis Function Combinator Function
Compiled GCD function. Compiled GCD function.
Gentzen diagram.
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. See [gcd].
### Crosslinks ### Crosslinks
Lorem ipsum. [gcd]

View File

@ -2,28 +2,22 @@
## ge ## ge
Basis Function Combinator Basis Function
Same as a \>= b. Greater-than-or-equal-to comparison of two numbers.
Gentzen diagram. a b ge
--------------
Boolean
(a >= b)
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks
Lorem ipsum. [cmp]
[eq]
[gt]
[le]
[lt]
[ne]

View File

@ -2,70 +2,70 @@
## genrec ## genrec
Basis Function Combinator Combinator
General Recursion Combinator. : **Gen**eral **Rec**ursion Combinator.
[if] [then] [rec1] [rec2] genrec [if] [then] [rec1] [rec2] genrec
--------------------------------------------------------------------- ---------------------------------------------------------------------
[if] [then] [rec1 [[if] [then] [rec1] [rec2] genrec] rec2] ifte [if] [then] [rec1 [[if] [then] [rec1] [rec2] genrec] rec2] ifte
From \"Recursion Theory and Joy\" (j05cmp.html) by Manfred von Thun: ### Definition
\"The genrec combinator takes four program parameters in addition to
whatever data parameters it needs. Fourth from the top is an if-part,
followed by a then-part. If the if-part yields true, then the then-part
is executed and the combinator terminates. The other two parameters are
the rec1-part and the rec2-part. If the if-part yields false, the
rec1-part is executed. Following that the four program parameters and
the combinator are again pushed onto the stack bundled up in a quoted
form. Then the rec2-part is executed, where it will find the bundled
form. Typically it will then execute the bundled form, either with i or
with app2, or some other combinator.\"
The way to design one of these is to fix your base case \[then\] and the > \[\[[genrec]\] [ccccons]\] [nullary] [swons] [concat] [ifte]
test \[if\], and then treat rec1 and rec2 as an else-part
\"sandwiching\" a quotation of the whole function.
For example, given a (general recursive) function \'F\': : (Note that this definition includes the `genrec` symbol itself, it is
self-referential. This is possible because the definition machinery does
not check that symbols in defs are in the dictionary. `genrec` is the
only self-referential definition.)
### Discussion
See the [Recursion Combinators notebook](https://joypy.osdn.io/notebooks/Recursion_Combinators.html).
From ["Recursion Theory and Joy"](https://www.kevinalbrecht.com/code/joy-mirror/j05cmp.html)
by Manfred von Thun:
> "The genrec combinator takes four program parameters in addition to
> whatever data parameters it needs. Fourth from the top is an if-part,
> followed by a then-part. If the if-part yields true, then the then-part
> is executed and the combinator terminates. The other two parameters are
> the rec1-part and the rec2-part. If the if-part yields false, the
> rec1-part is executed. Following that the four program parameters and
> the combinator are again pushed onto the stack bundled up in a quoted
> form. Then the rec2-part is executed, where it will find the bundled
> form. Typically it will then execute the bundled form, either with i
> or with app2, or some other combinator."
The way to design one of these is to fix your base case `[then]` and the
test `[if]`, and then treat `rec1` and `rec2` as an else-part
"sandwiching" a quotation of the whole function.
For example, given a (general recursive) function `F`:
F == [I] [T] [R1] [R2] genrec F == [I] [T] [R1] [R2] genrec
If the \[I\] if-part fails you must derive R1 and R2 from: : If the `[I]` if-part fails you must derive `R1` and `R2` from: :
... R1 [F] R2 ... R1 [F] R2
Just set the stack arguments in front, and figure out what R1 and R2 Just set the stack arguments in front, and figure out what `R1` and `R2`
have to do to apply the quoted \[F\] in the proper way. In effect, the have to do to apply the quoted `[F]` in the proper way. In effect, the
genrec combinator turns into an ifte combinator with a quoted copy of `genrec` combinator turns into an [ifte] combinator with a quoted copy of
the original definition in the else-part: : the original definition in the else-part:
F == [I] [T] [R1] [R2] genrec F == [I] [T] [R1] [R2] genrec
== [I] [T] [R1 [F] R2] ifte == [I] [T] [R1 [F] R2] ifte
Primitive recursive functions are those where R2 == i. : Tail recursive functions are those where `R2` is the `i` combinator:
P == [I] [T] [R] tailrec P == [I] [T] [R] tailrec
== [I] [T] [R [P] i] ifte == [I] [T] [R [P] i] ifte
== [I] [T] [R P] ifte == [I] [T] [R P] ifte
Gentzen diagram.
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks
Lorem ipsum. [anamorphism]
[tailrec]
[x]

View File

@ -2,35 +2,45 @@
## getitem ## getitem
Basis Function Combinator Function
getitem == drop first
Expects an integer and a quote on the stack and returns the item at the Expects an integer and a quote on the stack and returns the item at the
nth position in the quote counting from 0. : nth position in the quote counting from 0.
[a b c d] 0 getitem ### Example
[a b c d] 2 getitem
------------------------- -------------------------
a c
Gentzen diagram.
### Definition ### Definition
if not basis. > [drop] [first]
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. If the number isn't a valid index into the quote `getitem` will cause
some sort of problem (the exact nature of which is
implementation-dependant.)
### Crosslinks ### Crosslinks
Lorem ipsum. [concat]
[first]
[first_two]
[flatten]
[fourth]
[remove]
[rest]
[reverse]
[rrest]
[second]
[shift]
[shunt]
[size]
[sort]
[split_at]
[split_list]
[swaack]
[third]
[zip]

View File

@ -2,7 +2,7 @@
## grabN ## grabN
Basis Function Combinator Function
\<{} \[cons\] times \<{} \[cons\] times

File diff suppressed because it is too large Load Diff

View File

@ -1378,10 +1378,7 @@ them with a Boolean value.
a b eq a b eq
------------- -------------
Boolean Boolean
(a = b)
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks
@ -1580,200 +1577,179 @@ Replace a list with its fourth item.
## gcd ## gcd
Basis Function Combinator Function
true \[tuck mod dup 0 \>\] loop pop Take two integers from the stack and replace them with their Greatest
Common Denominator.
Gentzen diagram.
### Definition ### Definition
if not basis. > true \[[tuck] [mod] [dup] 0 [>]\] [loop] [pop]
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. Euclid's Algorithm
### Crosslinks
Lorem ipsum.
------------------------------------------------------------------------ ------------------------------------------------------------------------
## gcd2 ## gcd2
Basis Function Combinator Function
Compiled GCD function. Compiled GCD function.
Gentzen diagram.
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. See [gcd].
### Crosslinks ### Crosslinks
Lorem ipsum. [gcd]
------------------------------------------------------------------------ ------------------------------------------------------------------------
## ge ## ge
Basis Function Combinator Basis Function
Same as a \>= b. Greater-than-or-equal-to comparison of two numbers.
Gentzen diagram. a b ge
--------------
Boolean
(a >= b)
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks
Lorem ipsum. [cmp]
[eq]
[gt]
[le]
[lt]
[ne]
------------------------------------------------------------------------ ------------------------------------------------------------------------
## genrec ## genrec
Basis Function Combinator Combinator
General Recursion Combinator. : **Gen**eral **Rec**ursion Combinator.
[if] [then] [rec1] [rec2] genrec [if] [then] [rec1] [rec2] genrec
--------------------------------------------------------------------- ---------------------------------------------------------------------
[if] [then] [rec1 [[if] [then] [rec1] [rec2] genrec] rec2] ifte [if] [then] [rec1 [[if] [then] [rec1] [rec2] genrec] rec2] ifte
From \"Recursion Theory and Joy\" (j05cmp.html) by Manfred von Thun: ### Definition
\"The genrec combinator takes four program parameters in addition to
whatever data parameters it needs. Fourth from the top is an if-part,
followed by a then-part. If the if-part yields true, then the then-part
is executed and the combinator terminates. The other two parameters are
the rec1-part and the rec2-part. If the if-part yields false, the
rec1-part is executed. Following that the four program parameters and
the combinator are again pushed onto the stack bundled up in a quoted
form. Then the rec2-part is executed, where it will find the bundled
form. Typically it will then execute the bundled form, either with i or
with app2, or some other combinator.\"
The way to design one of these is to fix your base case \[then\] and the > \[\[[genrec]\] [ccccons]\] [nullary] [swons] [concat] [ifte]
test \[if\], and then treat rec1 and rec2 as an else-part
\"sandwiching\" a quotation of the whole function.
For example, given a (general recursive) function \'F\': : (Note that this definition includes the `genrec` symbol itself, it is
self-referential. This is possible because the definition machinery does
not check that symbols in defs are in the dictionary. `genrec` is the
only self-referential definition.)
### Discussion
See the [Recursion Combinators notebook](https://joypy.osdn.io/notebooks/Recursion_Combinators.html).
From ["Recursion Theory and Joy"](https://www.kevinalbrecht.com/code/joy-mirror/j05cmp.html)
by Manfred von Thun:
> "The genrec combinator takes four program parameters in addition to
> whatever data parameters it needs. Fourth from the top is an if-part,
> followed by a then-part. If the if-part yields true, then the then-part
> is executed and the combinator terminates. The other two parameters are
> the rec1-part and the rec2-part. If the if-part yields false, the
> rec1-part is executed. Following that the four program parameters and
> the combinator are again pushed onto the stack bundled up in a quoted
> form. Then the rec2-part is executed, where it will find the bundled
> form. Typically it will then execute the bundled form, either with i
> or with app2, or some other combinator."
The way to design one of these is to fix your base case `[then]` and the
test `[if]`, and then treat `rec1` and `rec2` as an else-part
"sandwiching" a quotation of the whole function.
For example, given a (general recursive) function `F`:
F == [I] [T] [R1] [R2] genrec F == [I] [T] [R1] [R2] genrec
If the \[I\] if-part fails you must derive R1 and R2 from: : If the `[I]` if-part fails you must derive `R1` and `R2` from: :
... R1 [F] R2 ... R1 [F] R2
Just set the stack arguments in front, and figure out what R1 and R2 Just set the stack arguments in front, and figure out what `R1` and `R2`
have to do to apply the quoted \[F\] in the proper way. In effect, the have to do to apply the quoted `[F]` in the proper way. In effect, the
genrec combinator turns into an ifte combinator with a quoted copy of `genrec` combinator turns into an [ifte] combinator with a quoted copy of
the original definition in the else-part: : the original definition in the else-part:
F == [I] [T] [R1] [R2] genrec F == [I] [T] [R1] [R2] genrec
== [I] [T] [R1 [F] R2] ifte == [I] [T] [R1 [F] R2] ifte
Primitive recursive functions are those where R2 == i. : Tail recursive functions are those where `R2` is the `i` combinator:
P == [I] [T] [R] tailrec P == [I] [T] [R] tailrec
== [I] [T] [R [P] i] ifte == [I] [T] [R [P] i] ifte
== [I] [T] [R P] ifte == [I] [T] [R P] ifte
Gentzen diagram.
### Definition
if not basis.
### Derivation
if not basis.
### Source
if basis
### Discussion
Lorem ipsum.
### Crosslinks ### Crosslinks
Lorem ipsum. [anamorphism]
[tailrec]
[x]
------------------------------------------------------------------------ ------------------------------------------------------------------------
## getitem ## getitem
Basis Function Combinator Function
getitem == drop first
Expects an integer and a quote on the stack and returns the item at the Expects an integer and a quote on the stack and returns the item at the
nth position in the quote counting from 0. : nth position in the quote counting from 0.
[a b c d] 0 getitem ### Example
[a b c d] 2 getitem
------------------------- -------------------------
a c
Gentzen diagram.
### Definition ### Definition
if not basis. > [drop] [first]
### Derivation
if not basis.
### Source
if basis
### Discussion ### Discussion
Lorem ipsum. If the number isn't a valid index into the quote `getitem` will cause
some sort of problem (the exact nature of which is
implementation-dependant.)
### Crosslinks ### Crosslinks
Lorem ipsum. [concat]
[first]
[first_two]
[flatten]
[fourth]
[remove]
[rest]
[reverse]
[rrest]
[second]
[shift]
[shunt]
[size]
[sort]
[split_at]
[split_list]
[swaack]
[third]
[zip]
------------------------------------------------------------------------ ------------------------------------------------------------------------