Ответ 1
Вы не можете. Дело в том, что begin
имеет две роли: одна представляет собой последовательность побочных эффектов, а другая заключается в том, что она используется для "сращивания" макросов. Тот факт, что вы можете использовать begin
с определением, как в приведенном выше, является результатом этой второй функции, и вы не можете написать ее самостоятельно.
Если вы действительно хотите следовать всей истории, тогда вы можете определить begin
как простой макрос, который заставляет его выполнять только секвенциальный аспект (и он действительно может быть реализован как таковой, хотя обычно это не так). Но вам нужно добавить явное распознавание begin
для определения сплайсинга (toplevel или internal). Это означает, что реализация макросов прекрасна, но на самом деле это не может быть библиотекой, потому что основной расширитель должен знать об этом. (И поскольку язык лексически охвачен, нет лучшего способа, чтобы основной расширитель идентифицировал begin
, которые не определены на основном языке.)
Чтобы суммировать все это, можно сказать, что R5RS ошибочно относится к классификации begin
как "синтаксиса библиотеки", поскольку он не может быть определен в библиотеке... но даже это не совсем точно, поскольку R5RS определяет "синтаксис библиотеки" как "производные выражения". Таким образом, реальная неправильная точка состоит в том, что одна из begin
двух сторон реализована в другом месте, в расширителе (для контекстов определения).
Обратите внимание также, что R6RS разъясняет всю сделку: две грани begin
сделаны явными, и теперь она является частью основного языка, а не "формой библиотеки" и даже не производной формой.