Wstęp Przyszłość programowania Języki funkcyjne na przykładzie Clojure inż. Daniel Harbuz 23 maja 2012 Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 1 / 31
Wstęp Ageda Agenda Wstęp do programowania funkcyjnego Wprowadzenie do języka Clojure Struktura języka Clojure Demo Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 2 / 31
Wstęp do programowania funkcyjnego Historia Języki funkcyjne Information Processing Language Lisp Miranda Meta Language Scheme Haskell F# Clojure Scala Erlang Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 3 / 31
Wstęp do programowania funkcyjnego Programowanie funkcyjne Charakterystyka Funkcja Funkcja wyższego rzędu Stałe Wartościowanie Rekurencja Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 4 / 31
Wstęp do programowania funkcyjnego Programowanie funkcyjne Podział języków funkcyjnych Języki czysto funkcyjne leniwe wartościowanie brak zmiennych brak efektów ubocznych monady Języki mieszane wartościowanie zachłanne zmienne efekty uboczne tradycyjne wejście/wyjście Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 5 / 31
Wprowadzenie do języka Clojure Historia Historia Closure Rich Hickey 16 październik 2007 19 sierpień 2010 (1.2) Wersja 1.4 Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 6 / 31
Wprowadzenie do języka Clojure Wprowadzenie Clojure Programowanie funkcyjne Programowanie współbieżne Lisp Java Java Virtual Machine Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 7 / 31
Struktura języka Funkcje Zmienne a raczej stałe Formy specjalne Funkcje Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 8 / 31
Liczby Struktura języka Typy podstawowe postać dziesiętna 127 szesnastkowa 0x7F postać ósemkowa 0177 postać binarna 2r1111111 postać radix-32 32r3v Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 9 / 31
Liczby Struktura języka Typy podstawowe liczby dodatnie +127 liczby ujemne -127 Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 10 / 31
Struktura języka Liczby zmienno przecinkowe Typy podstawowe zapis tradycyjny 1.27 zapis tradycyjny ze znakiem +1.27-1.27 zapis wykładniczy 12e7 1.2e7 1.7e-2 Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 11 / 31
Liczby wymierne Struktura języka Typy podstawowe 12/7 7/12-7/12 Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 12 / 31
Struktura języka Typy podstawowe Symbole String To jest łańcuch znaków Charakters \a \A \u0042 \\ Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 13 / 31
Struktura języka Typy podstawowe Symbole Keywords :2 :? :słowo Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 14 / 31
Struktura języka Kolekcje Kolekcje Listy () (:A 2) (1 2 (a b c) 4 5) (1, 2, 3, 4) Wektory [ 1 2 3 4 ] Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 15 / 31
Struktura języka Kolekcje Kolekcje Mapy {1 jeden, 2 dwa, 3 trzy } Zestawy #{1 2 trzy :cztery 0x5} Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 16 / 31
Formy specjalne Struktura języka Formy specjalne def (def symbol inicjalizacja?) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 17 / 31
Formy specjalne Struktura języka Formy specjalne do (do instrukcje*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 18 / 31
Formy specjalne Struktura języka Formy specjalne let (let [ wiązania* ] instrukcje*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 19 / 31
Formy specjalne Struktura języka Formy specjalne if (if (warunek) (prawda) (fałsz?)) if-not (if-not (warunek) (fałsz) (prawda?)) when (when (warunek) prawda*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 20 / 31
Formy specjalne Struktura języka Formy specjalne recur (recur wartości*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 21 / 31
Formy specjalne Struktura języka Formy specjalne loop (loop [ wiązania* ] instrukcje*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 22 / 31
Formy specjalne Struktura języka Formy specjalne fn (fn nazwa [parametry*] instrukcje*) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 23 / 31
Rekurencja Struktura języka Rekurencja (defn prime ([x] (if-not (= 0 (rem x 2)) (prime x 3) (prime (+ x 1) 2))) ([x n] (if (< n (+ (quot x 2) 1)) (if-not (= 0 (rem x n)) (prime x (+ n 1)) (prime (+ x 1) 2)) x))) (defn prime ([x] (if-not (= 0 (rem x 2)) (prime x 3) (prime (+ x 1) 2))) ([x n] (if (< n (+ (quot x 2) 1)) (if-not (= 0 (rem x n)) (recur x (+ n 1)) (recur (+ x 1) 2)) x))) Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 24 / 31
Clojure w praktyce Środowiska programistyczne Środowiska programistyczne Read-Eval-Print Loop Clooj Eclipse Emacs JEdit IntelliJ IDEA Leiningen Maven Netbeans Vim Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 25 / 31
DEMO Clojure w praktyce Środowiska programistyczne Trochę praktyki... Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 26 / 31
Zakończenie Trochę Statystyki Gdzie najczęściej używa się Clojure Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 27 / 31
Zakończenie Trochę Statystyki W jakich projektach używa się Clojure Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 28 / 31
Clojure w Polsce Zakończenie Clojure w Polsce Fablo.pl Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 29 / 31
Bibliografia Zakończenie Bibliografia L. VanderHart and S. Sierra, Practical Clojure, Apress, 2010. M. Fogus and C. Houser, The Joy of Clojure, Manning, 2011. R. Hickey, Clojure, 2012. www.clojure.org. Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 30 / 31
Zakończenie Bibliografia Dziękuję za uwagę. Przyszłość programowaniajęzyki funkcyjne na przykładzie Clojure 23 maja 2012 31 / 31