LispKit Lisp

LispKit LispLisp語言的嚴格函數式子集(「純Lisp」),它是作為函數式編程概念的測試台而開發的。它首先使用了對惰性求值的早期經驗。在1980年開發者Peter Henderson,出版了用一種變體ALGOL語言寫的基於SECD抽象機的實現[1]。編譯器和虛擬機都是高度可移植的,並已經在多種機器上實現[2]

基本函數

基本語言只提供了下列函數,但在Henderson的書中討論了明確支持惰性求值非確定性編程的擴展。

atom
接受一個表達式,如果它的值是原子則返回 True;否則返回 False。
add
接受兩個表達式,返回它們的數值的和。
car
接受其值為點對的一個表達式,返回這個點對的第一個值。
cdr
接受其值為點對的一個表達式,返回這個點對的第二個值。
cons
接受兩個表達式,返回由它們的值構成的一個點對值。
div
接受兩個表達式,返回它們的數值的商。
eq
接受兩個表達式,如果它們的值相等則返回 True;否則返回 False。
if
接受三個表達式,如果第一個為 True 則返回第二個的值,否則返回第三個的值。
lambda
接受一個表達式,返回這個表達式為可求值的值。
let
接受命名表達式的一個列表,返回這個列表為一個單一可求值的值。
letrec
接受命名表達式的一個列表,返回這個列表為一個單一可求值的值。
leq
接受兩個表達式,如果第一個數值小於或等於第二個則返回 True;否則返回 False。
rem
接受兩個表達式,返回它們的數值的餘數。
mu
接受兩個表達式,返回它們的數值的積。
quote
接受一個表達式,返回這個表達式為一個值。
sub
接受兩個表達式,返回它們的數值的差。

函數lambda、let和letrec是類似的,但是在處理命名變量的方式上有着微妙的區別,故有不同的用處。lambda定義並返回一個函數,let把表達式賦值給變量名,而letrec本質上類似於let,除了它允許遞歸函數的定義之外。

引用

進一步閱讀

  • Peter Henderson, Geraint A. Jones, and Simon B. Jones, "The LispKit Manual" (ISBN 0-902928-18-X)

外部連結