6a4aaf8eac
FossilOrigin-Name: 25cf19660ab7728d7bfee2722ea826a8a438faf92b2504b28d922d2958906aed
38 lines
751 B
Forth
38 lines
751 B
Forth
# Naming Quotes
|
|
|
|
Anonymous functions called quotes are used heavily by Retro.
|
|
This shows a way to attach names to them.
|
|
|
|
In a classic Forth, words are created using `:`, which is
|
|
one of numerous parsing words. So a named function looks
|
|
like:
|
|
|
|
: foo ... ;
|
|
|
|
In Retro, there are no parsing words. There is a sigil
|
|
handler `:`, yielding:
|
|
|
|
:foo ... ;
|
|
|
|
Quotes start with `[` and end with `]`. So they look like:
|
|
|
|
[ ... ]
|
|
|
|
If we want to name a quote, we need to:
|
|
|
|
- create a header
|
|
- assign the xt field to the quote address
|
|
- set the class handler
|
|
|
|
This word, `def`, does these.
|
|
|
|
~~~
|
|
:def (as-) d:create d:last d:xt store &class:word reclass ;
|
|
~~~
|
|
|
|
An example of using this:
|
|
|
|
```
|
|
[ 'Hello_%s!\n s:format s:put ] 'hello def
|
|
'#forth hello
|
|
```
|