abu@software-lab.de

Pico Lisp Frequently Asked Questions

(c) Software Lab. Alexander Burger

Why did you write yet another Lisp?
Simply because other Lisps are not the way I want them to be. The history of Pico goes back to 1988; at that time machine resources on PC's were limited and existing Lisp systems not very usable. Today's Lisps concentrate on efficient compilation, and lost the one-to-one relation of language and virtual machine of an interpreted system.

Is there (or will be in the future) a compiler available?
No. That would contradict the idea of Pico's simple virtual machine structure. A compiler transforms it to another (physical) machine, with the result that many assumptions about the machine's behavior won't hold any more. Besides that, Pico's primitive functions evaluate their arguments independently and are not very much suited for being called from compiled code. Finally, the gain in execution speed would probably not be worth the effort.

I cannot find the LAMBDA keyword in Pico.
Because it isn't there. The reason is that it is redundant; it is equivalent to the quote function in all practical aspects. If you insist on it, you can define your own lambda:


: (setq lambda quote)
-> 67293272
: ((lambda (X Y) (+ X Y)) 3 4)
-> 7
: (mapcar (lambda (X) (+ 1 X)) '(1 2 3 4 5))
-> (2 3 4 5 6)

Are there no problems caused by dynamic variable binding?
You mean the funarg problem, or problems that arise when a variable might be bound to itself? For that reason it should be a convention to use only transient symbols (and not internal symbols)

What happens when I locally bind a symbol which has a function definition?
That's not a good idea. The next time that function gets executed within the dynamic context the system may crash. Therefore we have the convention to use an upper case first letter for variables and not for functions.