После прочтения http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html#node_sec_12.3 мой вывод выглядит следующим образом:
Если mac
является синтаксическим преобразователем
(mac foo (bar baz))
заменит весь s-expr результатом преобразования, что может привести к чему-либо, скажем (SOMETHING)
, тогда как (foo mac bar)
заменит только mac
, что приведет к (foo SOMETHING bar)
.
Обычно (set! mac 'foo)
будет сигнализировать об ошибке, кажется, что преобразователь не может появиться слева от выражения набора, но если mac
является переменным преобразователем, (set! mac 'foo)
вместо этого вызовет mac
со всем s- выраж.
Моя интуиция подсказывает мне, что это будет полезно, если вы начнете реализовывать типы данных с помощью макросов.