Lisp语法/格式

时间:2013-09-27 18:05:37

标签: lisp

尝试使用Lisp。我不知道,为什么:

(defun hello(x)
    (print x)
)

工作正常,但是:

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

2 个答案:

答案 0 :(得分:3)

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

所以,

(print x)

是对print的函数调用,其参数为x

但是,

(print (x))

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

答案 1 :(得分:1)

值得注意的是,括号不仅仅是将语法分组,因为它们在许多其他语言中都是如此;它们也会调用函数,类似于X.valX.val()中的x不同的函数。蟒蛇。

因此,在这种情况下,您尝试将hello称为函数。但是,根据您传递给x的内容,{{1}}不是函数,因此无法调用。