Little updates to the spec doc.
This commit is contained in:
parent
6ed3a770fb
commit
c01b107541
30
Thun.md
30
Thun.md
|
|
@ -11,6 +11,8 @@ programming language created by Manfred von Thun that is easy to use and
|
||||||
understand and has many other nice properties. **Thun** is a dialect of
|
understand and has many other nice properties. **Thun** is a dialect of
|
||||||
Joy that attempts to stay very close to the spirit of Joy but does not
|
Joy that attempts to stay very close to the spirit of Joy but does not
|
||||||
precisely match the behaviour of the original version written in C.
|
precisely match the behaviour of the original version written in C.
|
||||||
|
(In the rest of this document I'll use the names Joy and Thun
|
||||||
|
interchangably.)
|
||||||
|
|
||||||
|
|
||||||
## Grammar
|
## Grammar
|
||||||
|
|
@ -150,11 +152,30 @@ of these:
|
||||||
|
|
||||||
### Definitions
|
### Definitions
|
||||||
|
|
||||||
Thun can be extended by adding new definitions to the `defs.txt` file and
|
Thun can be extended by adding new definitions to the
|
||||||
rebuilding the binaries. Each line in the file is a definition
|
[defs.txt](https://git.sr.ht/~sforman/Thun/tree/trunk/item/implementations/defs.txt)
|
||||||
|
file and rebuilding the binaries. Each line in the file is a definition
|
||||||
consisting of the new symbol name followed by an expression for the body
|
consisting of the new symbol name followed by an expression for the body
|
||||||
of the function.
|
of the function.
|
||||||
|
|
||||||
|
The `defs.txt` file is just joy expression, one per line, that have a
|
||||||
|
symbol followed by the definition for that symbol, e.g.:
|
||||||
|
|
||||||
|
sqr dup mul
|
||||||
|
|
||||||
|
The definitions form a DAG (Directed Acyclic Graph) (there is actually a
|
||||||
|
cycle in the definition of `genrec` but that's the point, it is a cycle
|
||||||
|
to itself that captures the cyclical nature of recursive definitions.)
|
||||||
|
|
||||||
|
I don't imagine that people will read `defs.txt` to understand Joy code.
|
||||||
|
Instead people should read the notebooks that derive the functions to
|
||||||
|
understand them. The reference docs should help, and to that end I'd
|
||||||
|
like to cross-link them with the notebooks. The idea is that the docs
|
||||||
|
are the code and the code is just a way to make precise the ideas in the
|
||||||
|
docs.
|
||||||
|
|
||||||
|
### Adding Functions to the Dictionary with `inscribe`
|
||||||
|
|
||||||
You can use the `inscribe` command to put new definitions into the
|
You can use the `inscribe` command to put new definitions into the
|
||||||
dictionary at runtime, but they will not persist after the program ends.
|
dictionary at runtime, but they will not persist after the program ends.
|
||||||
The `inscribe` function is the only function that changes the dictionary.
|
The `inscribe` function is the only function that changes the dictionary.
|
||||||
|
|
@ -162,6 +183,11 @@ It's meant for prototyping. (You could abuse it to make variables by
|
||||||
storing "functions" in the dictionary that just contain literal values as
|
storing "functions" in the dictionary that just contain literal values as
|
||||||
their bodies.)
|
their bodies.)
|
||||||
|
|
||||||
|
[foo bar baz] inscribe
|
||||||
|
|
||||||
|
This will put a definition for `foo` into the dictionary as `bar baz`.
|
||||||
|
|
||||||
|
|
||||||
## Problems
|
## Problems
|
||||||
|
|
||||||
### Symbols as Data
|
### Symbols as Data
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue