Перші кроки з 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. Мови, які підтримують написання коду з використанням власних структур даних (їх називають гомоіконічними), мають багато переваг завдяки простому та однорідному синтаксису. Зокрема генерація коду за допомогою макросів у таких мовах простіша ніж, у інших, що дає розробникам змогу розширяти мову за власними потребами.

results matching ""

    No results matching ""