我知道这是一个我提前道歉的新手问题。我正在写一个递归函数,它返回给定列表中的' o
(defun garde-o (liste)
(cond
((not liste) 0)
((equal (car liste) 'o) (+ 1 (garde-o(cdr liste))) )
((garde-o(cdr liste)) )
)
)
我没有返回发生的次数,而是希望仅使用' o返回给定列表。
就像那样:
(garde-o '(a o x & w o o))
应该返回=> (o o o)
我不想使用pop
,push
,set
...只是我无法找回来。
答案 0 :(得分:1)
请注意,给定出现次数,例如10,您只需执行
(make-list 10 :initial-element 'o)
或等效
(loop repeat 10 collect 'o)
要计算列表中的“o”,您可以
(count 'o '(a b c o p o a z))
因此,您的功能的简单解决方案是
(defun garde-o (a)
(make-list (count 'o a) :initial-element 'o))
但是,你也可以递归地执行此操作
(defun garde-o (a)
(cond ((null a) nil)
((eq (car a) 'o) (cons 'o (garde-o (cdr a))))
(t (garde-o (cdr a)))))
且非递归
(defun garde-o (a)
(loop for x in a when (eq x 'o) collect x))