add DO LOOP +LOOP to example/compat.forth
FossilOrigin-Name: 1c2c94fff681153c259cddf2ab9d1a60e042d7270ea0190f5965b3d36429d5ce
This commit is contained in:
parent
8992c742fc
commit
1e1e5e469d
2 changed files with 15 additions and 6 deletions
|
@ -53,6 +53,9 @@ with tradition as well as the minimal requirements of ANS.
|
||||||
:AGAIN |again ; immediate
|
:AGAIN |again ; immediate
|
||||||
:FOR |[ ; immediate
|
:FOR |[ ; immediate
|
||||||
:NEXT |] |times<with-index> ; immediate
|
:NEXT |] |times<with-index> ; immediate
|
||||||
|
:DO |[ |[ |[ ; immediate
|
||||||
|
:LOOP |] |dip |] |dip |n:inc |dup-pair |gt? |] |while |drop-pair ; immediate
|
||||||
|
:+LOOP |] |dip |] |dip |swap |push |+ |pop |swap |dup-pair |gt? |] |while |drop-pair ; immediate
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
## I/O
|
## I/O
|
||||||
|
@ -172,7 +175,8 @@ The following words are not supported due to design choices in RETRO.
|
||||||
-------- -------- -------- -------- -------- --------
|
-------- -------- -------- -------- -------- --------
|
||||||
# #> #S ' ( ."
|
# #> #S ' ( ."
|
||||||
['] : >IN [CHAR] ABORT" CONSTANT
|
['] : >IN [CHAR] ABORT" CONSTANT
|
||||||
CREATE POSTPONE S" SOURCE VARIABLE WORD
|
CREATE EXIT POSTPONE S" SOURCE VARIABLE
|
||||||
|
WORD
|
||||||
-------- -------- -------- -------- -------- --------
|
-------- -------- -------- -------- -------- --------
|
||||||
|
|
||||||
The following are not supported due to limitations of the VM.
|
The following are not supported due to limitations of the VM.
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
The standard RETRO language provides `bi` and `tri` combinators to apply quotes to two or three values in various combinations. Sometimes it may be necessary to do this with four values.
|
The standard RETRO language provides `bi` and `tri` combinators
|
||||||
|
to apply quotes to two or three values in various combinations.
|
||||||
|
Sometimes it may be necessary to do this with four values.
|
||||||
|
|
||||||
Note that this is *ugly* code. It's functional, but if you can refactor to avoid needing it, it'll likely be better in the long run.
|
Note that this is *ugly* code. It's functional, but if you can
|
||||||
|
refactor to avoid needing it, it'll likely be better in the long
|
||||||
|
run.
|
||||||
|
|
||||||
`quad` applies four quotes to a value. These are equivilent:
|
`quad` applies four quotes to a value. These are equivilent:
|
||||||
|
|
||||||
|
@ -19,7 +23,8 @@ Note that this is *ugly* code. It's functional, but if you can refactor to avoid
|
||||||
pop pop call ;
|
pop pop call ;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
`quad*` takes eight values (!) and applies each quote to a specific value. E.g., these are equivilent:
|
`quad*` takes eight values (!) and applies each quote to a
|
||||||
|
specific value. E.g., these are equivilent:
|
||||||
|
|
||||||
#10 [ #1 + ] call
|
#10 [ #1 + ] call
|
||||||
#11 [ #1 - ] call
|
#11 [ #1 - ] call
|
||||||
|
@ -36,7 +41,8 @@ Note that this is *ugly* code. It's functional, but if you can refactor to avoid
|
||||||
pop pop call ;
|
pop pop call ;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
`quad@` takes four values and a quote, and applies the quote to each value in order. These are equivilent:
|
`quad@` takes four values and a quote, and applies the quote to
|
||||||
|
each value in order. These are equivilent:
|
||||||
|
|
||||||
#10 [ #1 + ] call
|
#10 [ #1 + ] call
|
||||||
#11 [ #1 + ] call
|
#11 [ #1 + ] call
|
||||||
|
@ -49,4 +55,3 @@ Note that this is *ugly* code. It's functional, but if you can refactor to avoid
|
||||||
:quad@ (abcdq-)
|
:quad@ (abcdq-)
|
||||||
'abcde 'abcdeeee reorder quad* ;
|
'abcde 'abcdeeee reorder quad* ;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue