12 | 12 |
also hygienic in the sense that all defined ABT operations are, quite unlike
|
13 | 13 |
Lisp's `cons` lists, designed to preserve their name-binding structure.
|
14 | 14 |
|
15 | |
_This is an extremely preliminary release of the language, aiming only to_
|
|
15 |
_This is an embryonic iteration of the language, aiming only to_
|
16 | 16 |
_present a proof-of-concept. The basic ideas are implemented but their exact_
|
17 | |
_design and implementation surely can and surely will be improved upon._
|
|
17 |
_design and implementation surely can and ideally will be improved upon._
|
18 | 18 |
|
19 | 19 |
For more details on the language, [see "Documentation" below](#documentation).
|
20 | 20 |
|
|
45 | 45 |
|
46 | 46 |
What follows is a more informal introduction.
|
47 | 47 |
|
48 | |
Lisp is usualy promoted as being homoiconic, but explanations of its
|
|
48 |
Lisp is usualy promoted as being homoiconic, but presentations of its
|
49 | 49 |
homoiconicity often gloss over the following detail: not every
|
50 | |
valid S-expression is a valid Lisp program. In essence there are
|
|
50 |
valid S-expression is a valid Lisp program. In essence Lisp has
|
51 | 51 |
two syntaxes, the "low-level syntax" of S-expressions, and the
|
52 | |
"high-level syntax" of special forms. Despite this, traditionally,
|
53 | |
`(quote (let 123))` is a perfectly good quoted form (even though
|
54 | |
`(let 123)` is not a valid expression) and the argument to `eval`
|
55 | |
is a list (even though it need not contain a valid expression).
|
|
52 |
"high-level syntax" of special forms. The traditional treatment
|
|
53 |
is to completely ignore that fact, and allow expressions such as
|
|
54 |
`(quote (let 123))` to be perfectly acceptable quoted form, even though
|
|
55 |
`(let 123)` is not a valid expression -- and to have the argument to
|
|
56 |
`eval` is a list, even though a list need not contain a valid expression.
|
56 | 57 |
|
57 | |
This is a shortcoming. Argyle intends to address it. Although
|
58 | |
given in an S-expression syntax, Argyle programs are not parsed
|
|
58 |
Argyle regards this as a shortcoming, and intends to address it. Although
|
|
59 |
they are written in an S-expression syntax, Argyle programs are not parsed
|
59 | 60 |
into cons lists. More precisely, even if the implementation parses
|
60 | 61 |
them into cons lists (as the reference implementation does), those
|
61 | 62 |
cons lists are not directly exposed to the interpreter. Rather, the
|
|
72 | 73 |
----
|
73 | 74 |
|
74 | 75 |
* Continue to clean up ABT helper functions as needed
|
75 | |
* `if` operator
|
76 | 76 |
* Equality operator
|
77 | 77 |
* Test that equality operator treats ABTs as alpha-equivalent
|
78 | 78 |
* `letrec` - implement in code first, eventually look towards
|