Lisp递归函数,返回列表

时间:2015-02-13 07:46:39

标签: recursion lisp common-lisp

知道这是一个我提前道歉的新手问题。我正在写一个递归函数,它返回给定列表中的' 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 ......只是我无法找回来。

2 个答案:

答案 0 :(得分:1)

您当前的版本返回一个在每次递归时递增的数字。因此,您建议的版本应该通过构建列表来工作,并在每次递归时扩展它。

0替换为‘(),将+ 1替换为cons ‘o

答案 1 :(得分:0)

你很亲密,

(defun garde-o (liste)
 (cond ((not liste) nil)
  ((equal (car liste) 'o) (cons (car liste) (garde-o (cdr liste))))
  ((garde-o (cdr liste)))))

用法:(garde-o '(a o x & w o )) => (o o)

您只需要选择已识别的汽车。