2013-09-27 61 views
-1

在Lisp上试试我的手。虽然我不知道,为什么:Lisp语法/格式化

(defun hello(x) 
    (print x) 
) 

做工精细,但:

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

不是?

+0

[REPL中的错误:输入要使用的值而不是(FDEFINITION'X)]的可能重复(http://stackoverflow.com/questions/16493467/error-in-repl-input-a-value-用来代替fdefinition-x) –

回答

3

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

所以,

(print x) 

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

但是,

(print (x)) 

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

+0

啊哈,有趣。谢谢! – sircodesalot

1

需要注意的是,括号不像其他语言那样简单地将语法分组,它们也调用函数,类似于X.val与例如X.val()不同。蟒蛇。

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