-1

尝试使用 Lisp。我想知道,为什么会这样:

(defun hello(x)
    (print x)
)

工作正常,但是:

(defun hello (x)
    (print(x)) ; Fails with EVAL: undefined function X.
)

不是?

4

2 回答 2

3

在 LISP 中,非空、不带引号的列表被视为(函数、宏或特殊形式)调用。

所以,

(print x)

是一个print带参数的函数调用x

但,

(print (x))

是一个函数调用print,其参数等于 的值(x)。但是由于(x)它也是非空列表,为了获得 的值,(x)尝试调用不存在的x不带参数的函数。

于 2013-09-27T18:15:47.650 回答
1

需要注意的是,括号并不是像许多其他语言那样简单地对语法进行分组。它们也调用函数,类似于Python 中X.val的不同。X.val()

所以在这种情况下,你试图调用x它,就好像它是一个函数一样。但是,根据您传递给的内容hellox它不是函数,因此无法调用。

于 2013-09-27T18:42:53.477 回答