Один крот: and
- это не процедура, это синтаксис (подумайте об этом: оценка останавливается, как только встречается первый #f
).
Но независимо от этого, я не думаю, что вы пытаетесь сделать это, переопределив and
. Вам нужно будет преобразовать fetch
в макрос. Вместо того, чтобы пытаться сканировать ввод и заменять and
, я бы использовал негигиеничный let
, чтобы переопределить значение and
локально. Немного так:
(define my-local-and ...)
(define the-real-fetch ...)
(define-syntax fetch
(ir-macro-transformer
(lambda (e i c)
`(let ((,(i 'and) my-local-and))
(the-real-fetch ,@(cdr e))))))
Я бы на самом деле возразил против этого, потому что это действительно испортит ожидания пользователей в отношении того, что происходит. Возможно, вы можете объяснить немного больше о почему вы хотите это сделать?