我是新來的lisp,我試圖通過簡單的檢查來查看列表是否爲空。出於測試目的,我創造了這個測試功能:Lisp(null(QUOTE NIL))返回NIL
(defun test (list)
(if (null (caddr list))
(make-node 1)
(caddr list)))
如果使用定義爲make-node
功能:
(defun make-node (atm)
(cons atm `(`() `())))
運行(make-node 6)
當我得到:
(6 (QUOTE NIL) (QUOTE NIL))
這是我想。
我然後調用(test (make-node 6))
然後我得到:
(QUOTE NIL)
這是從測試(caddr list)
。如果你運行(null (QUOTE NIL))
你得到T
這就是我想得到的,但是當我從給定的測試函數運行它時,我收到NIL
。
所以我的問題是爲什麼當我檢查這是否爲空爲什麼我得到NIL
而不是T
?
謝謝,這讓我很容易理解。有沒有辦法去除引號?或者你知道如何檢查內部列表是否爲空? – 2014-11-03 23:32:23
去引用是由'eval'完成的,但避免'eval'的解決方案通常更好。我猜想Sylvester關於改變'make-node'的建議可以解決你的問題,但是否則你可以使用測試'(和(eql(first(third list))'quote)(not(second(third list))))' 。 – 2014-11-04 06:26:24