尝试使用 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
它不是函数,因此无法调用。