Перші кроки з Lisp–синтаксисом
Мова Lisp була розроблена Джоном МакКарті у 1958 році і на сьогодні є однією з найдавніших мов програмування, що досі використовуються. Від Lisp походить велика кількість мов, які називають діалектами Lisp. ClojureScript – один з таких діалектів. На мові Lisp програми пишуть за допомогою структур даних самої Lisp – списків у дужках, але Clojure(Script) додала до первинного синтаксису Lisp нові структури даних, завдяки чому код на Clojure(Script) більш приємно писати та читати.
У ClojureScript список, першим елементом якого є функція, використовується для виклику функції. У наступному прикладі ми викликаємо функцію додавання із трьома аргументами. Зверніть увагу на те, що у мовах родини Lisp знаком +
позначають не оператор, а функцію. Операторів у Lisp немає – лише функції.
(+ 1 2 3)
;; => 6
У цьому прикладі ми застосовуємо функцію додавання +
до трьох аргументів 1
, 2
та 3
. ClojureScript дозволяє використовувати знаки питання, тире та численні інші незвичайні знаки у назвах символів, що спрощує сприйняття коду:
(zero? 0)
;; => true
Для розрізнення викликів функцій та списків даних ми можемо цитувати списки за допомогою функції quote
і тим самим заборонити їх обчислення. Цитовані списки сприймаються компілятором як дані, а не як виклик функції:
'(+ 1 2 3)
;; => (+ 1 2 3)
Синтаксис ClojureScript не обмежується списками. Детальну інформацію з цього питання ви знайдете у подальших розділах, а зараз лише наведемо приклад використання вектора (у прямокутних дужках) для визначення локальних звʼязувань (bindings):
(let [x 1
y 2
z 3]
(+ x y z))
;; => 6
Це майже усе, що нам потрібно знати про синтаксис для написання коду на ClojureScript, а також на будь-якому іншому діалекті Lisp. Мови, які підтримують написання коду з використанням власних структур даних (їх називають гомоіконічними), мають багато переваг завдяки простому та однорідному синтаксису. Зокрема генерація коду за допомогою макросів у таких мовах простіша ніж, у інших, що дає розробникам змогу розширяти мову за власними потребами.