在Ubuntu上,如果我运行MIT-Scheme,它将显示一个作为过程的功能:

1 ]=> (define (sq x) (* x x))

;Value: sq

1 ]=> (sq 3)

;Value: 9

1 ]=> sq

;Value 11: #[compound-procedure 11 sq]

伯克利的STk将显示sq作为闭包:
STk> (define (sq x) (* x x))
sq
STk> (sq 3)
9
STk> sq
#[closure arglist=(x) b73fab48]

Lisp(常见Lisp clisp)是怎么出现的,当我做同样的事情时,它将给我一个错误,以及如何将函数显示为值(头等值/对象)?
[1]> (defun sq(x) (* x x))
SQ
[2]> (sq 3)
9
[3]> sq

*** - SYSTEM::READ-EVAL-PRINT: variable SQ has no value
The following restarts are available:
USE-VALUE      :R1      Input a value to be used instead of SQ.
STORE-VALUE    :R2      Input a new value for SQ.
ABORT          :R3      Abort main loop

最佳答案

与Scheme不同,Common Lisp为变量和函数名称保留了单独的命名空间。在CL中尝试#'sq。还在Google周围搜索“Lisp1 vs Lisp2”,以获取关于该主题的无休止的口述。

关于common-lisp - 在Scheme或STk中,功能将显示为过程或闭包,但是LISP为什么会给出错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34255133/

10-11 00:13