Gary Knott của Interpreting Lisp là rất tốt đẹp. Bạn cũng có thể thử những người khác, như Jim Mayfield's Lisp. Có lẽ có rất ít Lisps ngoài kia ...
Bạn đã đề cập rằng bạn không thích C. Có thể bạn thích Haskell - trong trường hợp này bạn có thể thử "Write yourself a Scheme in 48 hours", một hướng dẫn thú vị (bạn có thể viết một trình thông dịch Scheme trong Haskell).
Cập nhật: Tôi biết rằng một Lisper hầu như không cảm thấy thoải mái khi sử dụng Haskell, nhưng hey, nó thoải mái hơn nhiều so với C (ít nhất là đối với tôi)! Bên cạnh đó, HAskell có một FFI tốt, vì vậy nó sẽ dễ dàng sử dụng trình đọc Lisp-Haskell làm thư viện tương thích với C.
Cập nhật 2: Nếu bạn muốn sử dụng XLisp, theo đề xuất của người dùng khác, có thể bạn sẽ cần src/xlread.c (863 dòng) và include/xlisp.h (1379 dòng) - nhưng tôi có thể sai ...
Cập nhật 3: Nếu bạn sử dụng Lisp của Gary Knott (một tệp C với 942 dòng), chữ ký hàm là int32 sread (void). Đây sẽ là sự lựa chọn của tôi nếu tôi không cần bất kỳ thứ gì lạ mắt (như macro đọc) hoặc được tối ưu hóa cao (có một giấy PDF mô tả cách mã được triển khai, vì vậy bạn sẽ không phải tìm đường trong mê cung). Tài liệu cho hàm này là:
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.
Xem Lisp của Gary cũ và bạn cần phải thay đổi nó để biên dịch. Thay vì bao gồm linuxenv.h, bao gồm:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <setjmp.h>
Ngoài ra, nó không hoạt động trong các máy 64-bit (tài liệu của sread sẽ cho bạn biết lý do tại sao ...)
Cập nhật 4: Có cũng là Scheme implementations bởi Nils Holm (có sách mô tả internals)
Tôi biết tôi có thể lấy một số mã ra khỏi các nguồn như vậy, nhưng chúng hơi nặng so với những gì tôi đang tìm kiếm. Rất nhiều thiết kế của họ được thúc đẩy bởi các yếu tố toàn cầu (đặc biệt là GC) không áp dụng ở đây. Tôi muốn một cái gì đó khá nhẹ --- cấu trúc dữ liệu Lisp cơ bản, một cái gì đó để đọc chúng, và các quy ước để giải phóng chúng. – airfoyle
http://www.xlisp.org cũng khá nhỏ. – ephemient