Reputation: 7055
know this is a newbie question I apologize in advance. I'm writing a recursive function which returns the number of 'o in a given list
(defun garde-o (liste)
(cond
((not liste) 0)
((equal (car liste) 'o) (+ 1 (garde-o(cdr liste))) )
((garde-o(cdr liste)) )
)
)
Instead of returning the number of occurence I would like to return the given list with only the 'o.
Like that:
(garde-o '(a o x & w o o)) should return => (o o o)
I don't want to use pop,push,set... just I can't find of to return this.
Upvotes: 1
Views: 854
Reputation: 1595
You are very close,
(defun garde-o (liste)
(cond ((not liste) nil)
((equal (car liste) 'o) (cons (car liste) (garde-o (cdr liste))))
((garde-o (cdr liste)))))
Usage: (garde-o '(a o x & w o ))
=> ( o o )
You just need to pick on your identified car.
Upvotes: 0
Reputation: 6311
Your current version returns a number which is incremented on each recursion. So your proposed version should work by building a list, extending it on each recursion.
Replace 0
with ‘()
, and + 1
with cons ‘o
.
Upvotes: 1