尖引号lambda时的非法函数调用>> [

问题描述 投票:0回答:2
如果这两个表达式相等,则>

CL-USER> (lambda (x) (+ x 10)) #<FUNCTION (LAMBDA (X)) {530321CB}> CL-USER> #'(lambda (x) (+ x 10)) #<FUNCTION (LAMBDA (X)) {5303226B}>

然后为什么我在这里得到非法函数调用错误

CL-USER> (#'(lambda (x) (+ x 10)) 10)

此期间

CL-USER> ((lambda (x) (+ x 10)) 10) 20 (5 bits, #x14, #o24, #b10100)

效果很好?

PS我正在使用SBCL。

如果这两个表达式相等,则CL-USER>(lambda(x)(+ x 10))#

CL-USER>#'(lambda(x)(+ x 10))#...] >

lambda lisp common-lisp
2个回答
1
投票
(lambda (x) (+ x 10))
[LAMBDA是扩展为(function (lambda ...))的宏。

#'(lambda (x) (+ x 10))

[#'是一个读取器宏,它在读取时扩展为(function ...)

0
投票
原因仅是一个语法规则:可以将任何形式解释为函数调用(请参见Common Lisp Glossary:]

a]

函数形式

,是列表的形式,并且具有第一个元素,该元素是要在参数上调用的函数的名称,这些参数是对函数形式的后续元素求值的结果。]]b)

lambda形式

© www.soinside.com 2019 - 2024. All rights reserved.