Вы, кажется, звоните remover
с замененными аргументами.Если вы назовете это так:
(remover '(a f c g f b) 'f)
, вы получите результат (a c g f b)
.
Поскольку вы хотите удалить все вхождения f
, вам также придется изменить(cdr lst)
в (remover (cdr lst) n)
, вот так:
(define (remover lst n)
(cond ((null? lst) ())
((eq? (car lst) n) (remover (cdr lst) n))
(else (cons (car lst) (remover (cdr lst) n)))))
Тогда (remover '(a f c g f b) 'f)
также должен дать ожидаемый результат (a c g b)
.
Чтобы переключить аргументы remover
, вы должны включить их в определении и для обоих рекурсивных вызовов, например:
(define (remover n lst)
(cond ((null? lst) ())
((eq? (car lst) n) (remover n (cdr lst)))
(else (cons (car lst) (remover n (cdr lst))))))