new example: naming quotes

FossilOrigin-Name: b7cb708ed7e5c798fddf0c30e9ac2eaf7f2951a958b17599e62e81c20987d9d5
This commit is contained in:
crc 2019-01-31 21:37:28 +00:00
parent 26eeaa6dfb
commit f26f5d54d9
2 changed files with 45 additions and 0 deletions

View file

@ -1,5 +1,9 @@
# RETRO 12.2019.6 # RETRO 12.2019.6
This is the changelog for the development builds of Retro.
I am currently planning to have the next release occur in
June 2019.
## Bug Fixes ## Bug Fixes
## Build ## Build
@ -70,11 +74,13 @@
- retro-extend: allow multiple files - retro-extend: allow multiple files
- retro-extend: reduce memory usage - retro-extend: reduce memory usage
- retro-extend: fix potential buffer overrun - retro-extend: fix potential buffer overrun
- muri: remove the unused `c` directive
## Other ## Other
## Documentation ## Documentation
- add a collection of papers
- refactor glossary tool - refactor glossary tool
- add HTML version of the Glossary - add HTML version of the Glossary
- add more concise text copies of the Glossary - add more concise text copies of the Glossary
@ -88,6 +94,7 @@
- add HTML.forth - add HTML.forth
- add KeyValueStore.forth - add KeyValueStore.forth
- add Marker.forth - add Marker.forth
- add Naming_Quotes.forth
- add net_fetch.forth - add net_fetch.forth
- add paste.forth - add paste.forth
- add Paste_to_Sprunge.forth - add Paste_to_Sprunge.forth

View file

@ -0,0 +1,38 @@
# 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 prefix
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
```