Не работает рекурсивная функция '"Неправильный аргумент типа в процедурной машине"

Я пишу рекурсивную функцию, которая принимает элемент A и список L и возвращает список, равный L, но при каждом удалении вхождения A. Вот что я написал:

(define (remove A L)
    (cond   ( (eq? A (car L))       (remove A (cdr L)) )
            ( (not(eq? A (car L)))  (cons (car L) (remove A (cdr L))) )
            ( (null? L)             '() )
    )
)

При компиляции и запуске я получаю следующую ошибку:

/tmp/compile/5c6515d8-e155-11e5-9605-aa00009baa05/input/main.scheme:2:21: In procedure remove:

/tmp/compile/5c6515d8-e155-11e5-9605-aa00009baa05/input/main.scheme:2:21: In procedure car: Wrong type argument in position 1 (expecting pair): ()

1 ответ

Решение

Я понял:

Первая проверка функции должна быть (null? L) как car а также cdr не может работать ни с одним пустым списком.

(define (remove A L)
    (cond   ( (null? L)             '() )
            ( (equal? A (car L))       (remove A (cdr L)) )
            ( (not(equal? A (car L)))  (cons (car L) (remove A (cdr L))) )
    )
)
Другие вопросы по тегам