(Nopred 'evenp '(1 S d ((4)) (7) ((((8)))) u))
它应该返回
(1 S d (()) (7) (((()))) u)
这是我写的功能
(Defun nopred (f list)
(Cond ((null list))
((Symbolp (car list)) (cons (car list) (nopred f (cdr list)))
((Listp (car list)) (cons (nopred f ( car list)) (nopred f (cdr list))))
((Funcall f (car list)) (nopred f (cdr list)))
(T (cons (car list) (nopred f (cdr list))))))
我尝试使用此代码解决但它不起作用,当evenp为true时它不会删除元素并返回
之类的值((((5 .T ) .).).)
答案 0 :(得分:0)
您需要在NIL
案例中返回(null list)
。如果您在匹配的COND
子句中没有返回值,则会返回条件的值,而(null list)
会返回T
。
您在发布的代码中也有一些拼写错误:(cdr l)
应该是(cdr list)
,并且该行末尾缺少)
。
(defun nopred (f list)
(cond ((null list) nil)
((symbolp (car list)) (cons (car list) (nopred f (cdr list))))
((listp (car list)) (cons (nopred f ( car list)) (nopred f (cdr list))))
((funcall f (car list)) (nopred f (cdr list)))
(t (cons (car list) (nopred f (cdr list))))))
通过这些更正,我得到了正确的结果:
(1 S d (nil) (7) (((nil))) u)