Gary Knott Interpreting Lisp es muy agradable. También puedes probar con otros, como Jim Mayfield's Lisp. Probablemente hay muchos pequeños Lisp por ahí ...
Mencionaste que no te gusta C. Tal vez te gustaría Haskell, en cuyo caso podrías probar "Write yourself a Scheme in 48 hours", un interesante tutorial (puedes escribir un intérprete de Scheme en Haskell).
Actualización: Sé que un Lisper difícilmente se sentiría cómodo con Haskell, pero bueno, es mucho más cómodo que C (al menos para mí). Además de eso, HAskell tiene una buena FFI, por lo que debería ser fácil usar el lector Lisp hecho por Haskell como una biblioteca compatible con C.
Actualización 2: Si desea utilizar XLISP, como se sugiere por otro usuario, es probable que necesite src/xlread.c (863 líneas) e incluyen/xlisp.h (1379 líneas) - pero pude estar equivocado ...
Actualización 3: Si usa Gary Knott's Lisp (un solo archivo C con 942 líneas), la firma de la función es int32 sread (void). Esta sería mi elección si no necesitara nada sofisticado (como leer macros) o altamente optimizado (hay un documento PDF que describe cómo se implementa el código, por lo que no tendrá que encontrar el camino en un laberinto). La documentación de la función es:
This procedure scans an input string g using a lexical token scanning
routine, e(), where e() returns
1 if the token is '('
2 if the token is '''
3 if the token is '.'
4 if the token is ')' or a typed pointer d to an
atom or number stored in row ptrv(d) in the atom or number tables.
Due to the typecode (8 or 9) of d, d is a negative 32-bit integer. The
token found by e() is stripped from the front of g.
SREAD constructs an S-expression and returns a typed pointer to it as
its result.
Ver que Lisp de Gary es viejo y que necesita para cambiarlo por lo que compila. En lugar de incluir linuxenv.h, incluyen:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <setjmp.h>
Además, no funciona en equipos de 64 bits (la documentación de SREAD debe decirle por qué ...)
Update 4: Hay también el Scheme implementations de Nils Holm (hay libros que describen el funcionamiento interno)
Sé que podría tomar algún código de fuentes como esas, pero son un poco demasiado pesadas para lo que estoy buscando. Gran parte de su diseño está motivado por factores globales (especialmente el GC) que no se aplican aquí. Quiero algo bastante liviano: estructuras de datos Lisp básicas, algo para leerlas y convenciones para liberarlas. – airfoyle
http://www.xlisp.org es bastante pequeño también. – ephemient