Вы сказали это сами, вы не можете передать and
, or
в качестве параметров, где ожидается функция, потому что они макросы и будут жаловаться на ошибку "неверный синтаксис". На самом деле, я не могу понять, как это работает для вас:
(my-reduce or '(1 2 3))
Единственный способ, которым я могу думать, это то, что вы переопределили and
, or
как функции где-то, и , что является источником проблем. В качестве примечания, my-reduce
(понимается как операция сгиба вправо) может быть реализовано более стандартным способом, подобным этому:
(define (my-reduce fun ls)
(if (null? (cdr ls))
(car ls)
(fun (car ls)
(my-reduce fun (cdr ls)))))
Выше предполагается, что список не пустой, если это не всегда так, обычно в качестве параметра передается начальное значение:
(define (my-reduce fun init ls)
(if (null? ls)
init
(fun (car ls)
(my-reduce fun init (cdr ls)))))