Muutke küpsiste eelistusi

E-raamat: Programming in Haskell

(University of Nottingham)
  • Formaat: PDF+DRM
  • Ilmumisaeg: 01-Sep-2016
  • Kirjastus: Cambridge University Press
  • Keel: eng
  • ISBN-13: 9781316876336
  • Formaat - PDF+DRM
  • Hind: 43,21 €*
  • * hind on lõplik, st. muud allahindlused enam ei rakendu
  • Lisa ostukorvi
  • Lisa soovinimekirja
  • See e-raamat on mõeldud ainult isiklikuks kasutamiseks. E-raamatuid ei saa tagastada.
  • Formaat: PDF+DRM
  • Ilmumisaeg: 01-Sep-2016
  • Kirjastus: Cambridge University Press
  • Keel: eng
  • ISBN-13: 9781316876336

DRM piirangud

  • Kopeerimine (copy/paste):

    ei ole lubatud

  • Printimine:

    ei ole lubatud

  • Kasutamine:

    Digitaalõiguste kaitse (DRM)
    Kirjastus on väljastanud selle e-raamatu krüpteeritud kujul, mis tähendab, et selle lugemiseks peate installeerima spetsiaalse tarkvara. Samuti peate looma endale  Adobe ID Rohkem infot siin. E-raamatut saab lugeda 1 kasutaja ning alla laadida kuni 6'de seadmesse (kõik autoriseeritud sama Adobe ID-ga).

    Vajalik tarkvara
    Mobiilsetes seadmetes (telefon või tahvelarvuti) lugemiseks peate installeerima selle tasuta rakenduse: PocketBook Reader (iOS / Android)

    PC või Mac seadmes lugemiseks peate installima Adobe Digital Editionsi (Seeon tasuta rakendus spetsiaalselt e-raamatute lugemiseks. Seda ei tohi segamini ajada Adober Reader'iga, mis tõenäoliselt on juba teie arvutisse installeeritud )

    Seda e-raamatut ei saa lugeda Amazon Kindle's. 

Haskell is a purely functional language that allows programmers to rapidly develop clear, concise, and correct software. The language has grown in popularity in recent years, both in teaching and in industry. This book is based on the author's experience of teaching Haskell for more than twenty years. All concepts are explained from first principles and no programming experience is required, making this book accessible to a broad spectrum of readers. While Part I focuses on basic concepts, Part II introduces the reader to more advanced topics. This new edition has been extensively updated and expanded to include recent and more advanced features of Haskell, new examples and exercises, selected solutions, and freely downloadable lecture slides and example code. The presentation is clean and simple, while also being fully compliant with the latest version of the language, including recent changes concerning applicative, monadic, foldable, and traversable types.

Arvustused

'The skills you acquire by studying this book will make you a much better programmer no matter what language you use to actually program in.' Erik Meijer, Facebook, from the Foreword Review of previous edition: 'The best introduction to Haskell available. There are many paths towards becoming comfortable and competent with the language but I think studying this book is the quickest path. I urge readers of this magazine to recommend Programming in Haskell to anyone who has been thinking about learning the language.' Duncan Coutts, The Monad.Reader Review of previous edition: 'Where this book excels is in the order and style of its exposition With its ripe selection of examples and its careful clarity of exposition, the book is a welcome addition to the introductory functional programming literature.' Journal of Functional Programming

Muu info

This extensively updated and expanded version of the best-selling first edition now covers recent and more advanced features of Haskell.
Foreword xiii
Preface xv
Part I Basic Concepts 1(120)
1 Introduction
3(11)
1.1 Functions
3(1)
1.2 Functional programming
4(2)
1.3 Features of Haskell
6(2)
1.4 Historical background
8(1)
1.5 A taste of Haskell
9(4)
1.6
Chapter remarks
13(1)
1.7 Exercises
13(1)
2 First steps
14(8)
2.1 Glasgow Haskell Compiler
14(1)
2.2 Installing and starting
14(1)
2.3 Standard prelude
15(1)
2.4 Function application
16(1)
2.5 Haskell scripts
17(4)
2.6
Chapter remarks
21(1)
2.7 Exercises
21(1)
3 Types and classes
22(16)
3.1 Basic concepts
22(1)
3.2 Basic types
23(2)
3.3 List types
25(1)
3.4 Tuple types
26(1)
3.5 Function types
27(1)
3.6 Curried functions
27(2)
3.7 Polymorphic types
29(1)
3.8 Overloaded types
30(1)
3.9 Basic classes
31(5)
3.10
Chapter remarks
36(1)
3.11 Exercises
36(2)
4 Defining functions
38(9)
4.1 New from old
38(1)
4.2 Conditional expressions
38(1)
4.3 Guarded equations
39(1)
4.4 Pattern matching
40(2)
4.5 Lambda expressions
42(2)
4.6 Operator sections
44(1)
4.7
Chapter remarks
45(1)
4.8 Exercises
45(2)
5 List comprehensions
47(12)
5.1 Basic concepts
47(1)
5.2 Guards
48(2)
5.3 The zip function
50(1)
5.4 String comprehensions
51(1)
5.5 The Caesar cipher
52(4)
5.6
Chapter remarks
56(1)
5.7 Exercises
57(2)
6 Recursive functions
59(14)
6.1 Basic concepts
59(2)
6.2 Recursion on lists
61(2)
6.3 Multiple arguments
63(1)
6.4 Multiple recursion
64(1)
6.5 Mutual recursion
65(1)
6.6 Advice on recursion
66(5)
6.7
Chapter remarks
71(1)
6.8 Exercises
71(2)
7 Higher-order functions
73(19)
7.1 Basic concepts
73(1)
7.2 Processing lists
74(2)
7.3 The f oldr function
76(3)
7.4 The f oldl function
79(2)
7.5 The composition operator
81(1)
7.6 Binary string transmitter
82(4)
7.7 Voting algorithms
86(3)
7.8
Chapter remarks
89(1)
7.9 Exercises
89(3)
8 Declaring types and classes
92(19)
8.1 Type declarations
92(1)
8.2 Data declarations
93(2)
8.3 Newtype declarations
95(1)
8.4 Recursive types
96(3)
8.5 Class and instance declarations
99(2)
8.6 Tautology checker
101(5)
8.7 Abstract machine
106(2)
8.8
Chapter remarks
108(1)
8.9 Exercises
109(2)
9 The countdown problem
111(10)
9.1 Introduction
111(1)
9.2 Arithmetic operators
112(1)
9.3 Numeric expressions
113(1)
9.4 Combinatorial functions
114(1)
9.5 Formalising the problem
115(1)
9.6 Brute force solution
115(1)
9.7 Performance testing
116(1)
9.8 Combining generation and evaluation
117(1)
9.9 Exploiting algebraic properties
118(1)
9.10
Chapter remarks
119(1)
9.11 Exercises
120(1)
Part II Going Further 121(142)
10 Interactive programming
123(16)
10.1 The problem
123(1)
10.2 The solution
124(1)
10.3 Basic actions
125(1)
10.4 Sequencing
126(1)
10.5 Derived primitives
127(1)
10.6 Hangman
128(1)
10.7 Nim
129(4)
10.8 Life
133(4)
10.9
Chapter remarks
137(1)
10.10 Exercises
137(2)
11 Unbeatable tic-tac-toe
139(14)
11.1 Introduction
139(1)
11.2 Basic declarations
140(1)
11.3 Grid utilities
141(1)
11.4 Displaying a grid
142(1)
11.5 Making a move
143(1)
11.6 Reading a number
144(1)
11.7 Human vs human
144(1)
11.8 Game trees
145(2)
11.9 Pruning the tree
147(1)
11.10 Minimax algorithm
148(2)
11.11 Human vs computer
150(1)
11.12
Chapter remarks
151(1)
11.13 Exercises
151(2)
12 Monads and more
153(24)
12.1 Functors
153(4)
12.2 Applicatives
157(7)
12.3 Monads
164(10)
12.4
Chapter remarks
174(1)
12.5 Exercises
175(2)
13 Monadic parsing
177(19)
13.1 What is a parser?
177(1)
13.2 Parsers as functions
177(2)
13.3 Basic definitions
179(1)
13.4 Sequencing parsers
179(2)
13.5 Making choices
181(2)
13.6 Derived primitives
183(3)
13.7 Handling spacing
186(1)
13.8 Arithmetic expressions
187(4)
13.9 Calculator
191(3)
13.10
Chapter remarks
194(1)
13.11 Exercises
194(2)
14 Foldables and friends
196(16)
14.1 Monoids
196(4)
14.2 Foldables
200(6)
14.3 Traversables
206(4)
14.4
Chapter remarks
210(1)
14.5 Exercises
210(2)
15 Lazy evaluation
212(16)
15.1 Introduction
212(1)
15.2 Evaluation strategies
213(3)
15.3 Termination
216(1)
15.4 Number of reductions
217(2)
15.5 Infinite structures
219(1)
15.6 Modular programming
220(3)
15.7 Strict application
223(3)
15.8
Chapter remarks
226(1)
15.9 Exercises
226(2)
16 Reasoning about programs
228(21)
16.1 Equational reasoning
228(1)
16.2 Reasoning about Haskell
229(1)
16.3 Simple examples
230(1)
16.4 Induction on numbers
231(3)
16.5 Induction on lists
234(4)
16.6 Making append vanish
238(3)
16.7 Compiler correctness
241(5)
16.8
Chapter remarks
246(1)
16.9 Exercises
246(3)
17 Calculating compilers
249(14)
17.1 Introduction
249(1)
17.2 Syntax and semantics
249(1)
17.3 Adding a stack
250(2)
17.4 Adding a continuation
252(2)
17.5 Defunctionalising
254(3)
17.6 Combining the steps
257(4)
17.7
Chapter remarks
261(1)
17.8 Exercises
261(2)
Appendix A Selected solutions 263(17)
A.1 Introduction
263(1)
A.2 First steps
264(1)
A.3 Types and classes
265(1)
A.4 Defining functions
266(1)
A.5 List comprehensions
267(1)
A.6 Recursive functions
267(1)
A.7 Higher-order functions
268(1)
A.8 Declaring types and classes
269(1)
A.9 The countdown problem
270(1)
A.10 Interactive programming
270(1)
A.11 Unbeatable tic-tac-toe
271(1)
A.12 Monads and more
272(1)
A.13 Monadic parsing
273(1)
A.14 Foldables and friends
274(1)
A.15 Lazy evaluation
275(1)
A.16 Reasoning about programs
276(3)
A.17 Calculating compilers
279(1)
Appendix B Standard prelude 280(18)
B.1 Basic classes
280(1)
B.2 Booleans
281(1)
B.3 Characters
282(1)
B.4 Strings
283(1)
B.5 Numbers
283(1)
B.6 Tuples
284(1)
B.7 Maybe
284(1)
B.8 Lists
285(2)
B.9 Functions
287(1)
B.10 Input/output
287(1)
B.11 Functors
288(1)
B.12 Applicatives
289(1)
B.13 Monads
290(1)
B.14 Alternatives
290(1)
B.15 MonadPlus
291(1)
B.16 Monoids
292(2)
B.17 Foldables
294(3)
B.18 Traversables
297(1)
Bibliography 298(2)
Index 300
Graham Hutton is Professor of Computer Science at the University of Nottingham. He has taught Haskell to thousands of students and received numerous best lecturer awards. Hutton has served as an editor of the Journal of Functional Programming, Chair of the Haskell Symposium and the International Conference on Functional Programming, and Vice-Chair of the Association for Computing Machinery (ACM) Special Interest Group on Programming Languages, and is an ACM Distinguished Scientist.