14 занимательных эссе о языке Haskell и функциональном программировании
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Душкин Роман Викторович
Год издания: 2011
Кол-во страниц: 288
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-94074-691-1
Артикул: 616134.01.99
В книге представлено 14 статей автора, которые в разное время были опубликованы или подготовлены к публикации в научно-популярном журнале для школьников и учителей «Потенциал». Статьи расположены и связаны таким образом, чтобы они представляли собой логически последовательное повествование от начал к более сложным темам. Также в книге сделан упор на практические знания, предлагается решение многих прикладных задач при помощи языка функционального программирования Haskell. Книга будет интересна всем, кто живо интересуется функциональным программированием, студентам технических ВУЗов, преподавателям информатики.
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
занимательных эссе о языке Haskell и функциональном программировании Душкин Р. В. Москва, 2011
УДК 004.4 ББК 32.973.26018.2 Д86 Душкин Р. В. Д86 14 занимательных эссе о языке Haskell и функциональном программировании. – М.: ДМК Пресс, 2011. – 288 с., ил. ISBN 9785940746911 В книге представлено 14 статей автора, которые в разное время были опубликованы или подготовлены к публикации в научнопопулярном журнале для школьников и учителей «Потенциал». Статьи расположены и связаны таким образом, чтобы они представляли собой логически последовательное повествование от начал к более сложным темам. Также в книге сделан упор на практические знания, предлагается решение многих прикладных задач при помощи языка функционального программирования Haskell. Книга будет интересна всем, кто живо интересуется функциональным программированием, студентам технических ВУЗов, преподавателям информатики. УДК 004.4 ББК 32.973.26018.2 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. © Душкин Р. В., 2011 ISBN 9785940746911 © Оформление ДМК Пресс, 201
! . , , , . . , , . ., , : 4100137733052 ; -, .
Haskell 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 . . . . . . . . . . . . . . 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Haskell 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 -30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 λ-40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 ? ! 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Haskell . . . . . . . . . . . . . . . . . . . . . . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Haskell 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 /. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 /. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 . . . . . . . . . . . . . . . . . . . . . . . . . 69 : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Haskell 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . . . . . . . . . 114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 139
2009 (ISSN 1814-6422) Haskell. , , . -, Haskell, , , . , , . , , , . , , , Haskell . , , . , . . . . . (), . . . ., . , , roman.dushkin@gmail.com. , (, , , ). . . . , 2011.
Haskell 2009 . . Haskell. , . , . , Haskell. , , : , , . . , Haskell , . Haskell ([8]). , , (. [6, 7, 14, 15, 16]). . Haskell Hello, world!. , . , , . , , . Haskell, 9 , , . , Haskell , . 1. . 1. . (Haskell ), , , . , , . 1 2 GHC , , GHC. Haskell98, , -. (GHCi). http://www.haskell.org/ghc/ QuickCheck QuickCheck. , , . . http://www.md.chalmers.se/rjmh/QuickCheck/ 10 Haskell 1 2 Haddock , Haddock HTML. , . http://www.haskell.org/haddock/ Darcs Darcs. , . http://www.darcs.net/ Cabal Cabal . , , Haskell. , , . http://www.haskell.org/cabal/ Hackage , Haskell Hackage. , . http://hackage.haskell.org/ , . Haskell, , .
. Hello, World!. Haskell : 1) _darcs ; 2) Hello.hs (main); 3) Hello.cabal Cabal; 4) Setup.hs Cabal; 5) README ; 6) LICENSE . , , (, /src). , , , . (Hello.hs) , . Hello, World!. 1) . : module Main −− | ' main ' , . main : : IO () main = putStr "Hello , World !" 2) . : darcs init darcs add Hello . hs darcs record Darcs , Hello.hs . 3) (, ), Cabal. Hello.cabal : Name : hello Version : 0 . 0 . 0 . 1 Description : Simplest Haskell Application License : GPL3 License−file : LICENSE Author : John Smith
Haskell Maintainer : john . smith@example . com Build−Type : Simple Cabal−Version : >= 1.8 Executable haq Main−is : Hello . hs Build−Depends : base >= 3 && < 5 -, .cabal Build−Depends. 4) . Setup.hs (Cabal .hs, .lhs). : import Distribution . Simple main = defaultMain 5) , README LICENSE . , . 6) Darcs. (, , ): darcs add Hello . cabal Setup . hs LICENSE README darcs record −−all 7) , Cabal. , Hackage. : cabal install −−prefix=\$HOME −−user /bin . . 8) . Haddock, Cabal, . : cabal haddock .html . , , . 9) QuickCheck. Darcs 13 , . main . . Test.hs, : darcs setpref test "runhaskell Tests . hs" , Test.hs . , Cabal . 10) (, , ) . : darcs tag Darcs , . 11) Cabal Hackage. , , : cabal check , Hackage. , : cabal sdist hello−0.0.0.1.tar.gz, , , Hackage. 12) () Hackage. (-http://hackage.haskell.org/). . -, , . . -http://www.haskell.org/ . Haskell. Wiki, -. , , Haskell, . Haskell. , , . , .
Haskell , 2009 () Haskell Haskell Platform. GHC, Haddock, Cabal, QuickCheck, . , Haskell, Hackage, http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_program.
(56) 2009 . , 01 -. (), . Haskell. , -() . , , . , , . , , . , , XIX XX . , . , Haskell ([6]). , , . , [2]. , , , : -, , -, (). ,
. . , , : X x1 x2 xm . . . y1 y2 yn . . . Y F . 2. F X Y , , λ-[1]. λ-. , Haskell λ-. [4], , . , , (). (, S, K, I), . λ-, , , . , , , , . , . (), (, ). , , , . , . , , , , . , , . , . . , . , , 17 . , . , , , , -. . , , Haskell. , . . , Haskell , , . , , [9]. , , . (, . .), . , , . -, (). , , . , , , : A1 → (A2 → . . . (An → B) . . .), (1) A1, A2, . . . An , B . , , . , A1, : A2 → (A3 → . . . (An → B) . . .). (2) , B. , (, ), , , . A1, A2, . . . An B , . , . , , . , , 18 , . , , , . , . , -. . ( , , 16), , 0. (), () (, . .). ? while , 0 , , . , . C++: std : : string int2hex ( int i) { std : : string result = ""; while (i) { result = hexDigit (i % 16) + result ; i /= 16; } return result ; } hexDigit , . ? , , 16 16, . , , , 0. , . Haskell : int2hex : : Integer −> String int2hex 0 = "" int2hex i = int2hex ( div i 16) ++ hexDigit ( mod i 16) div mod . (++) . Prelude. , (, ). int2hex , 0 (, 0, ). , , 19 (). , (. clause), . . , . , . , ? : convert : : Int −> Int −> String convert _ 0 = "" convert r i = convert r ( div i r) ++ digit r ( mod i r) . -, Integer Int, (Integer , Int [−229; 229 − 1]) . -, convert , . , . -, (_), , . , digit, , . , hexDigit, , . , : digit r i | r < 37 = i f (i < 10) then show i else [ ( toEnum (i + 5 5 ) ) : : Char ] | otherwise = "(" ++ ( show i) ++ ")" , digit, Haskell. -, (), . if-then-else . , (, [7]). show toEnum Prelude, . (a −> String), (Int −> a, Char). , digit : 37 (, ), . 37, , .