2013-09-27 63 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不是函數,因此無法調用。