У меня проблема с многоуровневой рекурсией. У меня есть два номера n1
и n2
. Когда counter
находится между n1
и n2
, я хочу, чтобы в результате сохранялись номера нулей, сохраняя внутреннюю структуру списка.Многоуровневая рекурсия в lisp
(defun izdvoj (lista n1 n2 counter)
(cond ((null lista) counter)
((and (atom (car lista))
(< counter n1)
(izdvoj (cdr lista) n1 n2 (+ counter 1))))
((and (atom (car lista))
(> counter n2)
(izdvoj (cdr lista) n1 n2 (+ counter 1))))
((atom (car lista))
(cons (car lista) (izdvoj (cdr lista) n1 n2 (+ counter 1))))
(t
(cons (izdvoj (car lista) n1 n2 counter) (izdvoj (cdr lista) n1 n2 counter)))))
(izdvoj '(1 2 (3 (4) 5 (6 (7)))(8 (9 (10 ((11))) 12)) (13 ((14) (15)))) 7 13 0)
Результат должен быть ((((7))) (8 (9 (10 ((11))) 12)) (13))
И я получаю (((4) ((7))) (((((11))) 12)) (((14) (15))))
Любые предложения, пожалуйста?
Что бы результат '(izdvoj«(аб (кд (е (е))) (GH)) 3 5 0) '? Что такое '' brojac''? Поскольку 'counter' используется, когда список пуст, все списки в результате должны быть пунктирными, как' (d (e (f. 6). 5). 4) '? – Sylwester
Не могли бы вы использовать английские имена переменных и функций? Неясно, что вы делаете. – sds
brojac то же, что и счетчик, и результат (издвойа) (a b (c d (e (f))) (g h)) 3 5 0), должен быть ((c d (e()))()) –