我有以下过滤函数,可以过滤掉不满足函数 f 的列表 x。
例如,我调用 (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 ?
非常感谢。 :)
最佳答案
基于this question它将是:
(remove-if #'evenp '(0 1 2 3))
关于LISP 处理讨厌的 NIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9371636/