我有以下的過濾器函數,它過濾掉不滿足函數f的列表x。LISP處理討厭的NIL
例如,我撥打(filter 'evenp '(0 1 2 3))
並取回(NIL 1 NIL 3)
。但這正是我的問題。我該怎麼做才能回到(1 3)
?
(defun filter (f x)
(setq h (mapcar #'(lambda (x1)
(funcall f x1))
x))
(mapcar #'(lambda (a b)
(cond ((null a) b)))
h x))
即問題就在這裏:(lambda (a b) (cond ((null a) b) ) )
在我cond
我沒有t
,或者else語句,所以不應該只是停在那兒,而不是返回nil
?我如何使它「返回」什麼都沒有,如果(cond ((null a) b))
不滿意,甚至不是nil
?
非常感謝。 :)
'h'是一個不確定的變量。你需要定義它。另外,這功課呢? – 2012-02-21 03:46:33
懷疑'h'應該在'let'裏面;看起來海報試圖將其用作中間存儲,然後將空值從中過濾出來。 – khedron 2012-02-21 03:57:52