LISP列表与范式

LISP列表与范式,lisp,eval,normalization,evaluation,lambda-calculus,Lisp,Eval,Normalization,Evaluation,Lambda Calculus,一些LISP表达式会自行计算(例如MIT Scheme REPL,但GNU Common LISP同意): 并且是正常的。因此,表达式的求值(例如(+21))可以恰当地说是转换为标准形式。这很好,因为我一直都是这样理解评估的 但在列表中,我们遇到了麻烦: 1 ]=> (list 3 2) ; Value 16: (3 2) 1 ]=> (3 2) ;The object 3 is not applicable. ;To continue, call RESTART with an o

一些LISP表达式会自行计算(例如MIT Scheme REPL,但GNU Common LISP同意):

并且是正常的。因此,表达式的求值(例如
(+21)
)可以恰当地说是转换为标准形式。这很好,因为我一直都是这样理解评估的

但在列表中,我们遇到了麻烦:

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.
我认为:

  • (许多[0])Lisp没有(非空)列表的标准格式,并且
  • (许多)Lisp不具备将求值简化为标准形式的特性
  • 如果是这样的话,这是否与PLT中的形式主义(如抽象重写系统)有点矛盾?在LISPs中捕获评估有哪些替代形式



    [0]或者更准确地说,“大多数突出的LISP”,如CL、Clojure和Scheme。但我会对不太知名的反例感兴趣

    Lisp只能用几个基本运算符来定义。所以你可以考虑从扩展到它们有一个正常的形式。

    但Lisp不是lambda演算

    以及:

    要使用函数作为参数,需要函数的符号,使用Church的lambda符号似乎很自然。我不理解本书的其余部分,因此我不想尝试实现他定义函数的更一般的机制。
    --Lisp的历史,斯坦福人工智能实验室备忘录,J.McCarthy,1979年,第6页


    Lisp只能用几个基本运算符来定义。所以你可以考虑从扩展到它们有一个正常的形式。

    但Lisp不是lambda演算

    以及:

    要使用函数作为参数,需要函数的符号,使用Church的lambda符号似乎很自然。我不理解本书的其余部分,因此我不想尝试实现他定义函数的更一般的机制。
    --Lisp的历史,斯坦福人工智能实验室备忘录,J.McCarthy,1979年,第6页


    Lisp中没有“范式”,求值也不会转换为范式。所有数据(除符号和列表外)的计算都是根据后来的Lisp方言的定义进行的。Lisp不是lambda演算的实现。它使用特定类型的求值器。Lisp中没有“范式”,求值也不会转换为范式。所有数据(除符号和列表外)的计算都是根据后来的Lisp方言的定义进行的。Lisp不是lambda演算的实现。它使用特定类型的评估器。
    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.