На странице 19 «Практического замысла» Люка ВандерХарта и Стюарта Сьерры, глава 2, есть параграф:
- Определение специальных форм: Специальные формы - это особый тип составной формы. Для большинства целей они используются очень похоже на вызов функции. Разница в том, что первая форма специальной формы - это не определенная где-то функция, а специальная системная форма, встроенная в Clojure.
1-й вопрос , Является ли слово формы здесь опечаткой? Разве это слово не будет item ? Если нет, def a форма ? Это означает, что этот код содержит 3 формы. : -S
Позже, когда запись объясняла пример, он использовал item .
(def message "Hello, World!")
- Анализируя первую форму (определение сообщения "Hello, World!"), Вы сначала видите, что она заключена в скобки. Следовательно, это список, и он будет оцениваться как приложение-функция или специальная форма. В списке три элемента : def, message и "Hello, World!". Первым элементом в списке, def, будет вызванная функция или специальная форма. В данном случае это особая форма. Но, как и функция, она принимает два параметра - переменную, которую нужно определить, и значение, к которому она привязана. Оценка этой формы создает переменную, которая устанавливает привязку значения "Hello, World!" на символьное сообщение.
* 2-й вопрос , является ли составной формой является специальной формой только в том случае, если первый элемент списка содержит только предопределено в Clojure ? Если да, то возможно ли создать специальную специальную форму? Тогда пользовательская составная форма будет называться специальной формой? Потому что, согласно определению, мой обычай - это не нечто встроенное в clojure, оно определено где-то еще.
EDIT:
Я думаю, что ответ на мой первый вопрос - нет, это не опечатка. def - это форма.
потому что позже в записи написано,
- Вторая форма (println message) также является списком, и на этот раз это обычное функциональное приложение. Он имеет двухкомпонентные формы - каждый из них является символом
Это означает, (println message)> все это форма, а все остальное (аргументы функции), которое она содержит, также является формой.
Но в начале автор сказал, что существует четыре основных разновидности форм.
- Буквально,
- Символ,
- Составная форма и
- Специальная форма.
Согласно определению Символов из книги, это не символ.
Определение символов Символы - это формы, которые разрешают значение. Их можно рассматривать как приблизительно похожие на переменные, хотя это технически неточно, поскольку на самом деле они не являются переменными, как в большинстве языков переменные. В Clojure символы используются для идентификации аргументов функции и глобально или локально определенных значений. Символы и их разрешение обсуждаются более подробно в следующих разделах. Причина, запись def и нажатие клавиши возврата выдает следующее сообщение об ошибке,
В какую категорию входит def ?