尝试使用 Lisp。我想知道,为什么会这样:
(defun hello(x)
(print x)
)
工作正常,但是:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不是?
尝试使用 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不带参数的函数。
需要注意的是,括号并不是像许多其他语言那样简单地对语法进行分组。它们也调用函数,类似于Python 中X.val的不同。X.val()
所以在这种情况下,你试图调用x它,就好像它是一个函数一样。但是,根据您传递给的内容hello,x它不是函数,因此无法调用。