Hi pd,
> - it breaks compatibility with almost all lisp out there
> ...
> Maybe I'm misunderstanding something.
Perhaps, though at a deeper level.
First of all, forget other Lisps! I always say it is best if you start with
PicoLisp without knowing "Lisp". Lisp dialects differ a lot, but PicoLisp starts
out from different assumptions, by targeting a pure interpreter while almost all
Lisps focus on compilation (even if they don't actually compile). Thinking this
consequently, you end up with a different language, not syntactically but
semantically.
The term "improper list" does not exist in PicoLisp. Everything is either a
number, a symbol or a pair.
As we are interpreter-only, every function is free to decide for itself how to
handle its arguments. Thus *every* built-in function is an FSUBR, always of the
form (fun . args).
If you look at the reference, you find plenty of cases like
(de sym . any) -> sym
(quote . any) -> any
(if 'any1 any2 . prg) -> any
(while 'any . prg) -> any
(cond ('any1 . prg1) ('any2 . prg2) ..) -> any
There is no "special" form! (Or, everything is a special form)
Back to the 'quote' case:
-- Saving "only one cell" is not a minor detail. Keep in mind how often 'quote'
is called in a typical program, and the performance of such an interpreted
program in general is a linear function of the number of cells.
-- The syntax of 'quote' also allows for nicer source code formatting. If you
ever look at a PicoLisp program, you find plenty of cases like
(for X
(quote
("html" . *XhtmlHtml)
("table" . *XhtmlTable)
("grid" . *XhtmlGrid)
("layout" . *XhtmlLayout)
("menu" . *XhtmlMenu)
("tab" . *XhtmlTab)
("input" . *XhtmlInput)
("field" . *XhtmlField)
("area" . *XhtmlArea)
("select" . *XhtmlSelect)
("submit" . *XhtmlSubmit) )
instead of (other Lisps!)
(for X
(quote
(("html" . *XhtmlHtml)
("table" . *XhtmlTable)
("grid" . *XhtmlGrid)
("layout" . *XhtmlLayout)
("menu" . *XhtmlMenu)
("tab" . *XhtmlTab)
("input" . *XhtmlInput)
("field" . *XhtmlField)
("area" . *XhtmlArea)
("select" . *XhtmlSelect)
("submit" . *XhtmlSubmit) ) )
☺/ A!ex
--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe