Gary Knott Interpreting Lisp è molto bello. Puoi provare anche altri, come Jim Mayfield's Lisp. Ci sono probabilmente un sacco di piccole Lisps ...
Hai detto che non ti piace C. Forse ti piacerebbe Haskell - nel qual caso potresti provare "Write yourself a Scheme in 48 hours", un tutorial interessante (devi scrivere un interprete di Schema in Haskell).
Aggiornamento: So che un Lisper non si sentirebbe a proprio agio con Haskell, ma hey, è molto più comodo di C (almeno per me)! Oltre a questo, HAskell ha una buona FFI, quindi dovrebbe essere facile usare il Lisp-reader di Haskell come libreria compatibile con C.
Aggiornamento 2: Se si desidera utilizzare XLISP, come suggerito da un altro utente, si avrà probabilmente bisogno src/xlread.c (863 linee) e include/xlisp.h (1379 linee) - ma ho potuto errato ...
Aggiornamento 3: Se si utilizza il Lisp di Gary Knott (un singolo file C con 942 linee), la firma della funzione è int32 sread (void). Questo sarebbe il mio choie se non avessi bisogno di qualcosa di elaborato (come i macro di lettura) o altamente ottimizzato (c'è un documento PDF che descrive come il codice è implementato, quindi non dovrai trovare la tua strada in un labirinto). La documentazione per la funzione è:
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.
Vedi che Lisp di Gary è vecchio e avrete bisogno di modificarlo in modo che compila. Invece di includere linuxenv.h, includono:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <setjmp.h>
Inoltre, non funziona nelle macchine a 64 bit (la documentazione di SREAD dovrebbe dire perché ...)
Update 4: Non c'è anche il Scheme implementations da Nils Holm (ci sono libri che descrivono i meccanismi interni)
So che potrei prendere del codice da fonti come quelle, ma sono un po 'troppo pesanti per quello che sto cercando. Gran parte del loro design è motivato da fattori globali (in particolare il GC) che non si applicano qui. Voglio qualcosa di abbastanza leggero --- strutture dati Lisp di base, qualcosa da leggere e convenzioni per liberarle. – airfoyle
http://www.xlisp.org è piuttosto piccolo. – ephemient