加里·諾特的Interpreting Lisp是非常好的。 您也可以嘗試其他人,如Jim Mayfield's Lisp。有可能很多小Lisp在那裏...
你提到你不喜歡C.也許你會喜歡Haskell - 在這種情況下,你可以嘗試"Write yourself a Scheme in 48 hours",一個有趣的教程(你可以寫Haskell中的Scheme解釋器)。
更新:我知道一個Lisper很難用Haskell感覺舒服,但是,嘿,它比C更舒服(至少對我來說)!除此之外,HAskell具有良好的FFI,因此使用Haskell製作的Lisp閱讀器作爲C兼容庫應該很容易。
更新2:如果你想使用XLISP,由另一個用戶建議,你可能需要的src/xlread.c(863線)和包括/ xlisp.h(1379線), - 可是我是錯誤的...
更新3:如果使用加里·諾特的Lisp語言(與942線一個單一的C文件),該函數簽名是INT32 SREAD(無效)。如果我不需要任何花哨的東西(比如讀取宏)或高度優化(這裏有一篇描述代碼如何實現的PDF文件,所以你不必在迷宮中找到自己的方式),這將是我的選擇。該功能的文檔是:
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.
看到加里的Lisp是舊的,你需要改變它,所以它編譯。相反,包括linuxenv.h的,包括:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <setjmp.h>
而且,它不會在64位機器上工作(SREAD的文檔會告訴你爲什麼...)
更新4:有也Scheme implementations由尼爾斯·霍爾姆(有說明內部書籍)
來源
2009-10-03 03:04:34
Jay
我知道我可以從這些源代碼中獲取一些代碼,但它們對我所尋找的東西來說太重了。他們的許多設計都是受全球因素(特別是氣相色譜)驅動,這些因素在這裏不適用。我想要一些相當輕量級的東西 - 基本的Lisp數據結構,讀取它們的東西以及釋放它們的約定。 – airfoyle 2009-10-02 23:39:40
http://www.xlisp.org也很小。 – ephemient 2009-10-03 04:59:17