1. Haskell
И н с т р у к ц и я п о
п р и г о т о в л е н и ю
« Д о к а з а т е л ь с т в о - э т о
п р о г р а м м а , а д о к а з ы в а е м а я
ф о р м у л а - э т о т и п п р о г р а м м ы »
Х . К а р р и
2. Что такое
функциональное
программирование?
http://ru.wikipedia.org/wiki/
Функциональное_программирование
26. Слово о лени
ghci> take 24 [13,26..]
[13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,
234,247,260,273,286,299,312]
ghci> take 10 (cycle [1,2,3])
[1,2,3,1,2,3,1,2,3,1]
ghci> take 10 (repeat 5)
[5,5,5,5,5,5,5,5,5,5]
29. List comprehensions
let chunkyBacon xs =
[ if odd x then "chunky" else "bacon" | x <- xs, x < 100, x /= 0 ]
30. Do it yourself
ghci> let adjectives = ["Maverick","Natty","Lucid","Oneiric"]
ghci> let nouns = ["Lynx","Ocelot","Narwhal","Meerkat"]
["Maverick Meerkat","Natty Narwhal","Lucid Lynx","Oneiric
Ocelot"]
Help functions:
filter (> 0) <list>
31. Do it yourself
ghci> let full_list = [
if (head adj) == (head noun)
then adj ++ " " ++ noun
else "" |
adj <- adjectives, noun <- nouns]
ghci> filter (/= "") full_list
["Maverick Meerkat","Natty Narwhal","Lucid
Lynx","Oneiric Ocelot"
32. Tuples
Отличия кортежей от списков
Кортежи могут быть неоднородны
Кортежи имеют чётко заданную длину
Кортежи разной длины имеют разные типы