2015-02-13 2 views
1

знаю, что это вопрос новичков. Прошу прощения заблаговременно. Я пишу рекурсивную функцию, которая возвращает число «O в данном спискеLisp рекурсивная функция, возвратный список

(defun garde-o (liste) 
    (cond 
     ((not liste) 0) 
     ((equal (car liste) 'o) (+ 1 (garde-o(cdr liste))) ) 
     ((garde-o(cdr liste)) ) 
    ) 
) 

Вместо возвращении количества встречаемости я хотел бы вернуть данный список с только» о.

Как что:

(Гард-о «(AOX & посвататься)) должен возвращать => (ооо)

Я не хочу, чтобы использовать поп, толчок, набор ... просто Я не могу найти, чтобы вернуть это.

+0

Вы должны избегать повторного вопроса, если голосуют ранее. Исправьте свой вопрос, и кто-то поможет вам. Вы уже опубликовали: http: //stackoverflow.com/questions/28494515/recursive-function-lisp-return-list – Rorschach

ответ

1

Ваша текущая версия возвращает число, которое увеличивается на каждую рекурсию. Поэтому ваша предлагаемая версия должна работать, создавая список, расширяя его для каждой рекурсии.

Заменить 0 на ‘() и + 1 с cons ‘o.

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

Вам просто нужно выбрать на вашем идентифицированного автомобиля.

Смежные вопросы