所以我在學校學習Lisp,我必須創建的程序之一是通過使用mapcan複製remove-if-function的功能。我已經創建了該程序並且它可以正常工作,但我不瞭解輸出。這個程序爲什麼返回一個原子列表?
具體而言,如果我是運行:
(findall 'numberp '(1 a 3))
的輸出是:(1 3)
該程序如下:
(defun findAll (fct l)
(cond
((null l) nil)
((mapcan (lambda(x) (if (funcall fct x) (list x) nil)) l))
)
)
我的解決方案的理解是如下所示: 「對於列表中的每個元素,調用lambda函數,如果函數fit的結果和元素x返回true,則返回元素su由括號括起來,否則返回零「
我不明白什麼是一連串的」list(x)「連續調用將如何返回一個原子列表,如(1 2)。
但是爲什麼最終的結果會被附在一起呢?這不僅僅是一堆列表嗎? – edoreld
@edoreld:MAPCAN可以做到這一點。請參閱其文檔:http://www.lispworks.com/documentation/HyperSpec/Body/f_mapc_.htm#mapcan –