我有这个功能的麻烦,我想要一个功能返回给定数字的次数列表。
到目前为止我做了什么,
(defun inf(n l)(条件((不是l)0)((> = n(车l))(…
首先,您发布的功能与您声称的方式不同。 第一次调用返回 (12 12 12 . 0) (因为你回来了 0 代替 nil 在第1 cond 条款) 第二次调用引发异常
(12 12 12 . 0)
0
nil
cond
COND:变量CONS没有值
因为你有 cond 语法错了。
第二,问题摘要,问题文本和尝试 实施,指定 的 三 强> 不同的问题。
这是对你的代码的修复(我替换了 car 和 cdr 同 first 和 rest 出于教学原因):
car
cdr
first
rest
(defun inf (n l) (cond ((not l) ()) ; return empty list ((>= n (first l)) (cons n (inf n (rest l)))) (t (cons (first l) (inf n (rest l))))))
事实上,如果这是你想要的,你可以实现更多 惯用方式:
(defun inf-1 (n l) (and l (cons (max n (first l)) (inf-1 n (rest l)))))
甚至
(defun inf-2 (n l) (mapcar (lambda (x) (max n x)) l))
如果您确实希望数字列表小于给定的数字,那么您 可以使用 remove :
remove
(remove 12 '(12 5 3 100) :test #'<=) ==> (5 3)