在Lisp上试试我的手。虽然我不知道,为什么:Lisp语法/格式化
(defun hello(x)
(print x)
)
做工精细,但:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不是?
在Lisp上试试我的手。虽然我不知道,为什么:Lisp语法/格式化
(defun hello(x)
(print x)
)
做工精细,但:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不是?
在LISP中,非空的不加引号的列表被视为(函数,宏或特殊形式)调用。
所以,
(print x)
是一个函数调用print
带参数x
。
但是,
(print (x))
是一个函数调用与print
等于的(x)
值的参数。但由于(x)
也是非空列表,为了得到(x)
的值,试图调用不存在参数的不存在的函数x
。
啊哈,有趣。谢谢! – sircodesalot
需要注意的是,括号不像其他语言那样简单地将语法分组,它们也调用函数,类似于X.val
与例如X.val()
不同。蟒蛇。
因此,在这种情况下,您试图拨打x
,就好像它是一个函数。但是,根据您传递给hello
的内容,x
不是函数,因此无法调用。
[REPL中的错误:输入要使用的值而不是(FDEFINITION'X)]的可能重复(http://stackoverflow.com/questions/16493467/error-in-repl-input-a-value-用来代替fdefinition-x) –