22. Магията на Lisp
• Половин вековна история
• Често имитиран, вечно ненадминат
• Изключително малко ядро
• Почти никакъв синтаксис
• “Кодът е данни” (code is data)
• Интерактивно програмиране
Saturday, November 3, 12
23. Проблемите на Lisp
(Common Lisp/Scheme)
• Никаква иновация след
стандартизирането им
• Сегментация
• Думата “едновременно” (concurrently) не
се споменава в спецификациите им
• Повечето Lisp-ове дефинират сами
своята платформа
Saturday, November 3, 12
32. Есенцията
• Динамичен език за програмиране
• JVM/CLR/JavaScript
• Модерен диалеакт на Lisp (1)
• Функционален по практичен начин
• Оптимизиран за паралелно програмиране
• Борец за един по-прост свят
Saturday, November 3, 12
33. Еволюцията на Lisp
• сбогом car & cdr (hello first & rest)
• по-малко скоби
• повече структури от данни с literal
синтаксис (set, map, vector)
• коварно бърз runtime
• стандартизиран runtime
• непроменими (immutable) структури данни
Saturday, November 3, 12
36. Lisp programmers know the value of
everything, but the cost of nothing.
Saturday, November 3, 12
37. Структури от данни
• свързан списък (list)
• множество (set)
• вектор
• асоциативен масив (map/dictionary)
• всичко Джавешко и родно
Saturday, November 3, 12
42. user> (doc and)
-------------------------
clojure.core/and
([] [x] [x & next])
Macro
Evaluates exprs one at a time, from left to right. If a form
returns logical false (nil or false), and returns that value and
doesn't evaluate any of the other expressions, otherwise it returns
the value of the last expr. (and) returns true.
nil
user> (source and)
(defmacro and
"Evaluates exprs one at a time, from left to right. If a form
returns logical false (nil or false), and returns that value and
doesn't evaluate any of the other expressions, otherwise it returns
the value of the last expr. (and) returns true."
{:added "1.0"}
([] true)
([x] x)
([x & next]
`(let [and# ~x]
(if and# (and ~@next) and#))))
nil
Saturday, November 3, 12
64. user> (guess-number secret-num)
Enter a guess between 1 and 10: 1
#{1}
user> (guess-number secret-num)
Enter a guess between 1 and 10: 2
#{1 2}
user> (guess-number secret-num)
Enter a guess between 1 and 10: 3
#{1 2 3}
...
user> (guess-number secret-num)
Enter a guess between 1 and 10: 7
#{1 2 3 4 5 6 7}
user> (guess-number secret-num)
Enter a guess between 1 and 10: 8
#{1 2 3 4 5 6 7 8}
user> (guess-number secret-num)
Enter a guess between 1 and 10: 9
You guessed correctly
Saturday, November 3, 12
69. Time is the new memory.
Saturday, November 3, 12
70. Звучи добре, ама дали
ще я бъде тая работа?
• Добри програмисти се изнасят на талази
към Clojure
• O’Reilly издадоха книга за Clojure!!!
• Thoughtbot съветва компаниите да
залагат на Clojure
Saturday, November 3, 12
71. Инструменти за
масово разрушение
• Leiningen 2
• Emacs
• clojure-mode
• paredit
• nrepl.el
Saturday, November 3, 12
72. Emacs Prelude включва всичко, което
ви трябва да програмирате на Clojure
https://github.com/bbatsov/prelude
Saturday, November 3, 12
73. Противотанкова
артилерия
• Eclipse (CounterClockWise)
• IntelliJ IDEA (LaClojure)
• NetBeans (Enclojure)
Saturday, November 3, 12