Чи квадратні дужки і фігурні дужки в Clojure все ще є S-виразами?


12

Я намагаюся дізнатися Лісп і дивлюся на всі Ліпси там і на їх відмінності.

Я бачу, що в деяких реалізаціях схеми ви можете використовувати квадратні дужки взаємозамінно з круглими дужками для читабельності, тому, оскільки вони обробляються однаково, я припускаю, що вони все ще є просто S-виразами, як і всі інші.

Однак у Clojure я бачу, що квадратні дужки та фігурні дужки використовуються для представлення різних типів даних, таких як вектори тощо. Це також все ще дійсні S-вирази, чи їх треба вважати атомами? Хіба це не "порушує" всю концепцію S-виразів, тим самим роблячи Clojure "нечистим" Ліспом?


Технічно "якщо квадратні дужки є s-виразами, як ви можете замість них виразити дужки?" не було частиною питання, але це я хочу знати.
Qwertie

Відповіді:


10

Буквальне позначення векторів і карт (тобто квадратні дужки і фігурні фігурні дужки) - це лише цукор часу читання , і все, що ви можете представити за допомогою цього позначення, також може бути представлене S-виразами. Як результат, немає втрати сили або гомоконічності, і справді макроси для читання (наскільки я розумію, є ще більш потужними) доступні у ряді ліній.

До речі, зауважте, що Clojure тепер забезпечує механізм створення користувальницьких "тегів" літералів, які, як і інші літерали, перетворюються на S-вирази ще до того, як вони будуть складені та інтерпретовані.


1
Ммм, ваша відповідь змушує мене думати, що я розумію менше, ніж я думав, що розумів про Ліспа. Отже, що ви говорите (я думаю), що квадратні і фігурні дужки насправді не є S-виразами. Я подумав, що вся ідея з Lisp input полягає в тому, що все є S-виразом. Схоже, мені потрібно ще кілька копати, перш ніж повернутися, щоб знову прочитати вашу відповідь. Дякую!
mydoghasworms

Це правильно - вони не є S-виразами. Синтаксис Lisp починається з S-виразів, оскільки все, що може бути виражене мовою, може бути виражене S-виразами. Але синтаксис Lisp не закінчується: багато компіляторів Lisp мають явну фазу читання-макросу, в якій спеціальні шаблони у вихідному коді перетворюються на S-вирази. Це дозволяє авторам мови запропонувати програмістам синтаксис, сприятливий для людини. Важливо зауважити, що оскільки все, що представлене цими спеціальними буквами, також може бути представлене у S-виразах, жодна з переваг гомоконічності не втрачається.
tvachon

3

S-вирази - це текстове подання даних. Числа, символи, комірки мінусів, списки, рядки ... Загальний Lisp також має текстові подання для масивів, векторів, інших типів чисел, символів, ... Загальний Lisp також пропонує зчитувач, що розширюється користувачем, щоб користувач міг додавати більше текстових подань для типів даних. Іноді цей механізм також використовується для зміни синтаксису мови програмування Lisp (наприклад, для підтримки виразних виправлень або висловлювань з інших мов програмування).

Таким чином, якщо діалект Lisp пропонує текстові подання для додаткових типів даних, це добре підходить до ідеї s-виразів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.