В Схеме, что является возвращаемым значением `(begin)`?
Я знаю это (begin expr1 expr2 ...)
оценит все выражения и вернет последнее оцененное.
Я обнаружил, что в Chez Scheme разрешено использовать begin
без выражений вроде так: (begin)
, Я использую схему Chez как часть моих исследований. Когда я пишу в консоли (begin)
он не отправляет синтаксическую ошибку, он просто ничего не отображает, как будто я получаю void
,
У меня вопрос, что тогда будет возвращено?
Я думал, что это был пустой объект, который вы можете получить, запустив (void)
, Однако, когда я проверил это, я понял, что это не так.
Я изучаю Chez Scheme как часть курса компилятора, который я беру, и мне нужно реализовать часть компилятора, которая может обрабатывать специальное слово begin
, Поэтому мне нужно знать, почему это вообще возможно, и что возвращает эта функция.
РЕДАКТИРОВАТЬ:
Я добавляю эту ссылку относительно этой темы. Я не смог полностью понять ответ. Кроме того, он не упомянул тип возврата.
1 ответ
Я думаю, что вопрос сбивает с толку различные варианты использования begin
, Если вы посмотрите на R6RS раздел 11.4.7 о begin
, он используется двумя различными способами: 1) с 0 или более "формами", и в этом случае формы синтаксически "вклеиваются" в окружающее тело, как если бы begin
там не было (я считаю, что это в основном полезно при написании макросов); и 2) с 1 или более выражениями, в этом случае он оценивает выражения в последовательности и возвращает результат последнего.
Когда вы говорите о "возвращаемом значении", вы говорите о (begin ...)
как выражение, но как выражение (вторая форма begin
выше), оно должно принимать одно или несколько выражений. Пустой (begin)
должна быть первой формой begin
, который просто склеивает "ничто" (0 форм) в окружающее тело, но это не "оценивается" отдельно от оценки тела в целом.