Бел не реализован, поэтому такой проблемы нет. Человеческий интеллект, читающий спецификацию, не пугается округлости. Мы читаем его как «учитывая, что у нас уже есть работающий макрос mac
, вот как его можно определить с помощью самого себя, и это определение следует понимать как определение того, что делает mac
».
Кто-то реализация Bel просто использовала бы это определение в качестве руководства для создания расширенной версии mac
, которая не зависит от mac
syntacti c sugar.
Версия с расширенным вручную может выглядеть например:
(set mac (macro (n . rest) `(set ,n (macro ,@rest))))
То есть мы используем set
, чтобы связать определение macro
с символом mac
, как если бы у нас был макрос mac
, если бы он у нас уже был. Как только мы это сделаем, мы получим mac
; мы можем обработать исходное определение из spe c, если мы будем sh.