recursion - Lisp递归函数,返回列表

  显示原文与译文双语对照的内容
0 0

知道这是一个新的问题,我提前道歉。 我写了一个递归函数,它返回给定列表中的'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 & o ) ) 应该返回=> ( o o )

我不想用pop推,。 只是我找不到这个。

时间: 原作者:

0 0

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

'() 替换 0,用 cons 'o 替换 + 1

原作者:
0 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 )

你只需要在你的车上找到。

原作者:
...