Hi,
I think I got the test-suite as well as a basic macro implementation
(the compiler framework is really cool, that was fairly easy to do);
recursive macros do not yet work, but otherwise it looks fine.
However, I want to tackle quasi-quotes (besides others) now; and in
Elisp %nil is not only #f of Scheme but also the end-of-list marker (I
guess that's why simply using Scheme's #f for %nil does not work).
I did some experiments, and it seems that Scheme respects it partially:
scheme@(guile-user)> `(1 2 3 . ,%nil)
(1 2 3)
(is %nil in Scheme a variable because it needs the unquote?)
However:
scheme@(guile-user)> (null? %nil)
#f
scheme@(guile-user)> (equal? %nil (cdr (list 1)))
#f
It would be cool to teach Guile somehow to treat %nil as the "standard"
end-of-list value, such that both of these queries would optimally
return true. At least, is there some way to construct lists terminated
by %nil using something like the list primitive? Other things needed
would be for instance terminating rest-arguments by %nil rather than '()
and the like.
So: How is this handled by the interpreter? Is there maybe some
runtime-option to make Guile use %nil as end-of-list for lists
constructed? Or could we introduce some means to do so?
If that's not a good idea because of performance or other
considerations, I guess I'll have to implement some conversion routine
and use that? This on the other hand will probably hit Elisp's performance.
Any suggestions and ideas welcome! Maybe I just fail to see something...
Thanks,
Daniel
--
Done: Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Kni-Mon-Pri