Я пытаюсь изучить Lisp и смотрю на все Lisp и их различия.
Я вижу, что в некоторых реализациях Scheme вы можете использовать квадратные скобки взаимозаменяемо с круглыми скобками для удобства чтения, поэтому, поскольку они обрабатываются одинаково, я предполагаю, что они по-прежнему являются просто S-выражениями, как и все остальное.
Однако в Clojure я вижу, что квадратные скобки и фигурные скобки используются для представления различных типов данных, таких как векторы и так далее. Являются ли они также действительными S-выражениями или их следует считать атомами? Разве это не «нарушает» всю концепцию S-выражений, что делает Clojure «нечистым» Лиспом?
Ответы:
Буквенные обозначения для векторов и карт (т. Е. Квадратные скобки и фигурные скобки) являются просто сахаром времени чтения , и все, что вы можете представить в этой записи, также может быть представлено с помощью S-выражений. В результате не происходит потери мощности или гомойконичности, и действительно, макросы считывателя (которые, как я понимаю, являются еще более мощными) доступны в нескольких списках.
Кстати, обратите внимание, что Clojure теперь предоставляет механизм для создания пользовательских «теговых» литералов, которые, как и другие литералы, преобразуются в S-выражения перед их компиляцией и интерпретацией.
источник
S-выражения - это текстовое представление данных. Числа, символы, cons-ячейки, списки, строки, ... Common Lisp также имеет текстовые представления для массивов, векторов, других типов чисел, символов, ... Common Lisp также предоставляет расширяемый пользователем читатель, так что пользователь может добавлять более текстовые представления для типов данных. Иногда этот механизм также используется для изменения синтаксиса языка программирования Lisp (например, для поддержки выражений инфикса или операторов из других языков программирования).
Таким образом, если диалект Лисп предлагает текстовые представления для дополнительных типов данных, это хорошо согласуется с идеей s-выражений.
источник