Если вы хотите перегрузить функцию, которую вы определили ранее, просто определите ее снова.Это также работает для переопределения функций, таких как car и cdr, например, для превращения car в cdr:
(define (car x) (cdr x))
Однако,Я думаю, что вы не сможете повлиять на другие уже определенные функции с таким переопределением, поэтому системная функция, использующая автомобиль, все равно будет использовать исходную системную машину, а не вашу:
(определение (тест x) (автомобиль x))
(определение (тест x) (cdr x))
(тестирование (1 2 3))
1
Полагаю, причина этого в том, что внутренне символы исчезают, когда функция читается или оценивается, а символы заменяются тем, с чем они связаны;в этом случае актуальный код функции.Поэтому повторное связывание символа с другой функцией не повлияет на остальную часть вашего уже определенного кода.Обычно это хорошо, потому что помогает поддерживать ссылочную прозрачность.
Если вы хотите переопределить ключевые слова схемы, такие как lambda или cond, используйте синтаксис let (см. http://community.schemewiki.org/?scheme-faq-language)