热门问题
时间线
聊天
视角
LispKit Lisp
来自维基百科,自由的百科全书
Remove ads
LispKit Lisp是Lisp語言的嚴格函數式子集(「純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,除了它允許遞歸函數的定義之外。
Remove ads
引用
擴展閱讀
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads