標題幾乎可以告訴所有事情。檢查列表是否包含至少一個非零元素
我正在尋找類似
(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
我可以在一個遞歸的方式做到這一點,但我不能。我應該使用一些內置功能嗎? 我正在使用cLisp
標題幾乎可以告訴所有事情。檢查列表是否包含至少一個非零元素
我正在尋找類似
(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
我可以在一個遞歸的方式做到這一點,但我不能。我應該使用一些內置功能嗎? 我正在使用cLisp
如果您處理列表的第一個元素,那麼其餘所有內容都可以遞歸執行。代碼是這樣的:
(defun at-least-one-nonnil (l)
(and (not (nullp l))
(or (car l)
(at-least-one-nonnil (cdr l))))))
當然在這種簡單的情況下,已經有一個內置函數。
(defun at-least-one-nonnil-v2 (l)
(some #'identity l))
但這並不能幫助你瞭解遞歸。
這兩個函數實際上是不是至少一個零?爲了得到所需的行爲,你應該放棄最後一個函數的最後一個,並且用'#'identity'代替'#'not'。此外,Common Lisp使用'(defun function(args)...)'而'(define(function args)...)'是scheme。 – 2013-03-10 14:11:01
http://www.lispworks.com/documentation/HyperSpec/Body/f_everyc.htm#some – 2013-03-09 18:29:53
我會接受該評論作爲答案 – Simbi 2013-04-06 07:47:59