2017-02-10 62 views
0

一些LISP表達式求自己(的例子是MIT的方案REPL,雖然GNU Common Lisp的同意):LISP列表和正常形態

1 ]=> 3 
;Value: 3 

而且是在正常的形式。對錶達式(例如(+ 2 1))的評估因此可以適當地被認爲是轉換爲正常形式。這很好,因爲這正是我一直正式理解評估的方式。

但隨着列表,我們就有麻煩了:

1 ]=> (list 3 2) 
; Value 16: (3 2) 
1 ]=> (3 2) 
;The object 3 is not applicable. 
;To continue, call RESTART with an option number: 
; (RESTART 2) => Specify a procedure to use in its place. 
; (RESTART 1) => Return to read-eval-print level 1. 

我是正確的思維是:

  1. (許多[0])的Lisp沒有正常形態(非空)列表,並且
  2. (許多)LISP不具有評估正常化形式的屬性嗎?

如果是這樣,這與PLT中的形式主義(如抽象重寫系統)有何不同?什麼替代形式主義在LISPs中獲得評估?或者更準確地說,「大多數主要的LISP」,比如CL,Clojure和Scheme。[0]但我會對不那麼有名的反例感興趣!

+3

沒有「範式」在Lisp和評價不轉換到正常形態。所有數據(除符號和列表之外)評估爲themselve只是在後來的Lisp方言中定義。 Lisp不是lambda演算的實現。它使用特定類型的評估者。 –

回答

2

Lisp可以僅由幾個原始操作符來定義。 How many primitives does it take to build a LISP machine? Ten, seven or five?所以,你可以考慮從擴展到他們的東西中有一個正常的形式。

但是Lisp是不是演算。 What type of lambda calculus would Lisp loosely be an example of?

而且Lisp wasn't designed to be like the lambda calculus

要使用函數作爲參數,一個需求函數的符號,它很自然地使用教會的λ-符號。我不瞭解本書的其餘部分,所以我不想嘗試實現他定義函數的更一般的機制。
- 歷史Lisp語言,斯坦福大學人工智能實驗室的備忘錄1979年由J.麥卡錫,第6頁