«Синтаксис» - это тип для представления исходного кода в Racket, который является оберткой для S-выражения (подробности см. В недавнем сообщении в блоге ). «Значение синтаксиса» и «объект синтаксиса» являются синонимами этого, и в древние времена языковые функции mzscheme
, которые имели дело с синтаксисом, использовали syntax-value
в имени. В наши дни мы используем просто «синтаксис» чаще, а для формы множественного числа мы используем «синтаксис».
«S-выражение» - это либо примитивная часть данных, которую можно набирать в коде (символы, числа, строки, логические значения и т. Д. - в Racket вы также можете включить другие типы), либо список этих вещей , Следовательно, S-выражение - это любая вложенная структура списков, составленных из этих примитивных типов на границе. Иногда это также включает векторы (поскольку они могут быть введены с использованием синтаксиса #(...)
), но чаще они не учитываются.
Наконец, "datum" - это другое имя для S-выражения, иногда, когда вы хотите сослаться на тот факт, что это часть данных, которая имеет входное представление. Вы можете видеть, как R5RS представляет его: <Datum>
может быть любым внешним представлением объекта Scheme [...]. Эта нотация используется для включения буквенных констант в код Схемы.
Что касается ваших вопросов:
В чем разница между s-выражением и символом?
Символы - это S-выражение, S-выражение может содержать символы.
В чем разница между s-выражением и датумом?
Ничего особенного. (Хотя могут быть некоторые тонкие различия намерений.)
В чем отличие (синтаксис, значения синтаксиса и объект синтаксиса) от s-выражения?
Они представляют собой синтаксис программы, используемый макросами в ракетке - они содержат S-выражений, но они добавляют информацию о местоположении источника, лексический контекст, свойства синтаксиса и сертификаты. Смотрите краткое сообщение в блоге.