Каковы преимущества макросов схемы?

Почему кто-либо предпочел бы макросы Схемы по макросам языка Common LISP (и я действительно хочу знать также, я не пытаюсь быть сообщением-розыгрышем)?

Мой опыт как Lisp newb состоит в том, что макросы стиля языка Common LISP намного легче изучить, чем макросы Схемы. Я должен все же видеть любые преимущества для макросов Схемы, но конечно который не означает, что они не существуют.

Я действительно знаю, что макросы Схемы являются "hygenic", но я все еще не убежден, что это стоит дополнительной сложности. С другой стороны, хотя, очевидно, существует люди, которые убеждены, что это необходимо, иначе не было бы реализаций макросов Схемы в языке Common LISP.

Короче говоря, кто-то может защитить макросы Схемы мне?

23
задан Jason Baker 14 August 2010 в 16:03
поделиться

2 ответа

Макросы схемы вводят две, по существу, ортогональные концепции: гигиену и сопоставление с образцом. Гигиена менее важна в Lisp2, таком как Common Lisp. Язык сопоставления с образцом захватывает многие из общих макро-идиом, но имеет проблему, заключающуюся в том, что он существенно отличается от языка схемы. Вероятно, лучшим введением в макросы схемы, наряду с некоторым их обоснованием, являются главы 36 и 37 Шрирама Кришнамурти PLAI

.

Я подозреваю, что причина, по которой люди пишут макросистемы в стиле схемы в обычном шепелявлении, заключается в другом. для сопоставления с образцом, чем для гигиены.

19
ответ дан 29 November 2019 в 02:36
поделиться

Поскольку они используют другой язык, отличный от Scheme, макросы Scheme менее эффективны, чем макросы Common Lisp в почти формальном смысле: вы можете выполнять произвольное время компиляции вычисление с ними, но это волосатое и запутанное. Это очень похоже на аргумент в пользу отказа от использования набора ! : менее мощный набор! Бесплатные языки производят меньше ошибок в коде в обмен на неудобную обработку состояния. Каждый раз, когда вы меняете власть на дисциплину, вы делаете ставку на то, что в конечном итоге сможете построить более сложные системы.

Это лучший аргумент, который я видел в пользу макросов Scheme по сравнению с макросами Common Lisp: если вы строите сложный язык поверх Scheme, у вас меньше шансов внести тонкие макро-ошибки, если вы будете придерживаться стандартной системы макросов.

Лично я не создаю большие языки с помощью макросов, поэтому предпочитаю макросы Common Lisp. Я считаю, что они намного проще для небольших работ, и отказ от захвата переменных и т. Д. Не имеет большого значения для малых масштабов.

7
ответ дан 29 November 2019 в 02:36
поделиться