Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

14 занимательных эссе о языке Haskell и функциональном программировании

Покупка
Артикул: 616134.01.99
В книге представлено 14 статей автора, которые в разное время были опубликованы или подготовлены к публикации в научно-популярном журнале для школьников и учителей «Потенциал». Статьи расположены и связаны таким образом, чтобы они представляли собой логически последовательное повествование от начал к более сложным темам. Также в книге сделан упор на практические знания, предлагается решение многих прикладных задач при помощи языка функционального программирования Haskell. Книга будет интересна всем, кто живо интересуется функциональным программированием, студентам технических ВУЗов, преподавателям информатики.
Душкин, Р. В. 14 занимательных эссе о языке Haskell и функциональном программировании [Электронный ресурс] / Р. В. Душкин. - Москва : ДМК Пресс, 2011. - 288 с.: ил. - ISBN 978-5-94074-691-1. - Текст : электронный. - URL: https://znanium.com/catalog/product/408876 (дата обращения: 28.03.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
занимательных эссе

о языке 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, ,
.