Así como lo molesté a Juanjo Conti por un par de cosas que no andaban de su Lisp, me puse a hacer uno yo.
Implementa sólo las raíces de lisp; las 7 primitivas básicas y las 6 funciones derivadas de estas —aunque, la verdad, no las uso…—, según detalla The Roots of Lisp.
En el proceso aprendí varias cosas:
- Bison me odia1.
- Las
unions sirven para algo. - LISP es todavía más groso que lo que imaginaba.
- ([a-z]|micro|pico|femto|atto)lisp ya existe.
Bien, le falta mucho para estar completo; en particular, le falta la parte interactiva; por ahora es sólo un lisp-en-c; si se quiere hacer, digamos, (quote a) (y evaluarlo, claro), hay que hacer eval(cons(symbol("quote"),cons(symbol("a"),symbol("nil"))))…
Por esto, tampoco probé si lambda hace lo que debe y demás.
No tiene ningún tipo de números, porque tenía planeados ponerlos cuando haga funcionar el REPL.
Y finalmente, no hay recolector de basura…
Si alguien, por algún bizarro motivo, tiene ganas de usar el código, está en una de mis páginas secretas, liberado bajo la licencia BSD.
¿Será este el comienzo de una nueva era? ¿Una donde empiece a liberar código?… sólo el tiempo lo dirá.
- ¿Alguien se anima a tirarme una mano? ↩
Jueves 27 de Noviembre de 2008, 05:02
[...] Ceceo ya es un poquito m??s lindo; s??lo est??s a una bajada y un make de distancia de poder hacer, simplemente '(a b c) => (a b c). No es la gran cosa, pero es un Lisp??? Y mi problema con bison eran los malditos strings de C; estaba guardadando el puntero al string, en vez de una copia. Ahora s??. [...]