尝试使用Lisp。我不知道,为什么:
(defun hello(x)
(print x)
)
工作正常,但是:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不
答案 0 :(得分:3)
在LISP中,非空的,不带引号的列表被认为是(函数,宏或特殊形式)调用。
所以,
(print x)
是对print
的函数调用,其参数为x
。
但是,
(print (x))
是对print
的函数调用,其参数等于(x)
的值。但由于(x)
也是非空列表,为了获得(x)
的值,尝试调用不存在参数的不存在的函数x
。 / p>
答案 1 :(得分:1)
值得注意的是,括号不仅仅是将语法分组,因为它们在许多其他语言中都是如此;它们也会调用函数,类似于X.val
与X.val()
中的x
不同的函数。蟒蛇。
因此,在这种情况下,您尝试将hello
称为函数。但是,根据您传递给x
的内容,{{1}}不是函数,因此无法调用。