Pipe matching в ЯП Clojure (метапрограммирование в Lisp для начинающих)
|
|
Среда, 19 Ноября 2014 г. 19:05
+ в цитатник
Введение
Несколько дней назад я открыл для себя замечательный ЯП Clojure — один из современных диалектов Lisp, особенностью которого является хорошая реализация средств многопоточности, компиляция в байткод jvm, соответственно возможность использования java — библиотек, jit-компиляция и т.д. Про Clojure можно почитать например
тут. Но в этой статье речь пойдёт о метапрограммировании. Lisp устроен таким образом, что данные и код в нём — одно и то же. Объявления функций, макросов, вызовы функций, развёртывание макросов — в Lisp это всё просто списки, возможно вложенные друг в друга.
(defn square [foo] (* foo foo))
(defmacro show-it [foo] `(println ~foo))
Такое единство кода и данных предоставляет мощные возможности для метапрограммирования — код который пишет код, который пишет код, который пишет код и т.д. — это самое обычное дело для программирования на Lisp. В compile-time нам полностью доступен весь функционал языка, мы можем вызывать функции, развёртывать макросы, возможно рекурсивно. Например, если мы определим вот такой макрос:
Читать дальше → http://habrahabr.ru/post/243683/
Метки:
Функциональное программирование
lisp
метапрограммирование
clojure
pipes
pattern matching
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-