Я думаю, что ваша самая большая проблема заключается в этом разделе:
((remove r t) (set-car! t r))
Вы удаляете r
из t
, но вы действительно должны удалить r
из правого поддерева t
. Я не уверен, почему вы используете изменчивость / настройки, либо; Я думаю, что это усложняет то, что легко может быть функцией без побочных эффектов. Я бы попробовал что-то вроде:
(list r (cadr t) (remove r (caddr t)))
Я также должен признать, что меня немного смущает ваше намерение по поводу последней строки. Для чего вы используете пустой список?