在Lisp上試試我的手。雖然我不知道,爲什麼:Lisp語法/格式化
(defun hello(x)
(print x)
)
做工精細,但:
(defun hello (x)
(print(x)) ; Fails with EVAL: undefined function X.
)
不是?
在Lisp上試試我的手。雖然我不知道,爲什麼: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
。
啊哈,有趣。謝謝! – sircodesalot
需要注意的是,括號不像其他語言那樣簡單地將語法分組,它們也調用函數,類似於X.val
與例如X.val()
不同。蟒蛇。
因此,在這種情況下,您試圖撥打x
,就好像它是一個函數。但是,根據您傳遞給hello
的內容,x
不是函數,因此無法調用。
[REPL中的錯誤:輸入要使用的值而不是(FDEFINITION'X)]的可能重複(http://stackoverflow.com/questions/16493467/error-in-repl-input-a-value-用來代替fdefinition-x) –