Przyszłosc programowania Jezyki funkcyjne na przykładzie Clojure
Transkrypt
Przyszłosc programowania Jezyki funkcyjne na przykładzie Clojure
Wstęp Przyszłość programowania Języki funkcyjne na przykładzie Clojure inż. Daniel Harbuz 23 maja 2012 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 8 / 31 Struktura języka Typy podstawowe Liczby postać dziesiętna 127 szesnastkowa 0x7F postać ósemkowa 0177 postać binarna 2r1111111 postać radix-32 32r3v inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 9 / 31 Struktura języka Typy podstawowe Liczby liczby dodatnie +127 liczby ujemne -127 inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 10 / 31 Struktura języka Typy podstawowe Liczby zmienno przecinkowe zapis tradycyjny 1.27 zapis tradycyjny ze znakiem +1.27 -1.27 zapis wykładniczy 12e7 1.2e7 1.7e-2 inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 11 / 31 Struktura języka Typy podstawowe Liczby wymierne 12/7 7/12 -7/12 inż. Daniel Harbuz () 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 \\ inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 13 / 31 Struktura języka Typy podstawowe Symbole Keywords :2 :? :słowo inż. Daniel Harbuz () 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 [ 1234 ] inż. Daniel Harbuz () 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} inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 16 / 31 Struktura języka Formy specjalne Formy specjalne def (def symbol inicjalizacja?) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 17 / 31 Struktura języka Formy specjalne Formy specjalne do (do instrukcje*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 18 / 31 Struktura języka Formy specjalne Formy specjalne let (let [ wiązania* ] instrukcje*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 19 / 31 Struktura języka Formy specjalne Formy specjalne if (if (warunek) (prawda) (fałsz?)) if-not (if-not (warunek) (fałsz) (prawda?)) when (when (warunek) prawda*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 20 / 31 Struktura języka Formy specjalne Formy specjalne recur (recur wartości*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 21 / 31 Struktura języka Formy specjalne Formy specjalne loop (loop [ wiązania* ] instrukcje*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 22 / 31 Struktura języka Formy specjalne Formy specjalne fn (fn nazwa [parametry*] instrukcje*) inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 23 / 31 Struktura języka Rekurencja Rekurencja (defn prime (defn prime ([x] ([x] (if-not (= 0 (rem x 2)) (if-not (= 0 (rem x 2)) (prime x 3) (prime x 3) (prime (+ x 1) 2))) (prime (+ x 1) 2))) ([x n] ([x n] (if (< n (+ (quot x 2) 1)) (if (< n (+ (quot x 2) 1)) (if-not (= 0 (rem x n)) (if-not (= 0 (rem x n)) (prime x (+ n 1)) (recur x (+ n 1)) (prime (+ x 1) 2)) (recur (+ x 1) 2)) x))) x))) inż. Daniel Harbuz () 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 inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 25 / 31 Clojure w praktyce Środowiska programistyczne DEMO Trochę praktyki... inż. Daniel Harbuz () 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 inż. Daniel Harbuz () 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 inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 28 / 31 Zakończenie Clojure w Polsce Clojure w Polsce Fablo.pl inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 29 / 31 Zakończenie Bibliografia 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. inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 30 / 31 Zakończenie Bibliografia Dziękuję za uwagę. inż. Daniel Harbuz () Przyszłość programowaniaJęzyki funkcyjne na przykładzie Clojure 23 maja 2012 31 / 31