LISP列表和普通表格

时间:2017-02-10 19:02:50

标签: lisp eval normalization evaluation lambda-calculus

一些LISP表达式自我评估(例子是MIT-Scheme REPL,尽管GNU Common 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没有将评估减少到正常形式的属性吗?
  3. 如果是这样,这与PLT中的形式主义(如抽象重写系统)有些不一致吗?有哪些替代形式可以在LISP中进行评估?

    [0]或者更确切地说,"大多数着名的LISP",例如CL,Clojure和Scheme。但是我对那些鲜为人知的反例感兴趣!

1 个答案:

答案 0 :(得分:2)

Lisp只能用少数原始运算符来定义。 How many primitives does it take to build a LISP machine? Ten, seven or five?所以你可以考虑在扩展到它们时得到的正常形式。

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

Lisp wasn't designed to be like the lambda calculus

  

要使用函数作为参数,需要函数的符号,并且使用Church的lambda表示法似乎很自然。我不理解本书的其余部分,所以我没有试图实现他更通用的机制来定义函数    - Lisp的历史,J. McCarthy撰写的Stanford AI实验室备忘录,第6页