【问题标题】:Lisp recursive function, return listLisp递归函数,返回列表
【发布时间】:2026-02-17 16:05:01
【问题描述】:

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

【问题讨论】:

  • 如果早先被否决,您应该避免重新提问。纠正你的问题,有人会帮助你。您已经发布了:*.com/questions/28494515/…

标签: recursion lisp common-lisp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你很亲密,

    (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 )

    您只需要挑选您识别的汽车。

    【讨论】: