《Two Dozen Short Lessons in Haskell》学习(六)

《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by
Rex
Page,有人翻译为Haskell二十四套常教程,该书如果非用于赢利,可以无限制发布,但要保留他们之copyright)这本书是读书
Haskell的平等仿照练习册,共有2本,一据是问题,一随是答案,分为24只章节。在以此站点生PDF文件。几年前刚刚开念Haskell的时,感觉前几节还好拘留下,后面的情节越来越难以掌握。现在本着函数式编程有矣部分打听后,再来拘禁这些书,许多情变得简单起来了。

初学Haskell之前一定要铭记:

将您先读面向过程的正常化的编程语言,如Pascal、C、Fortran等等均忘在头脑后,函数式编程完全是休相同的编程模型,用以前的术语和揣摩来解函数式编程里之概念,只会为您困惑和模糊,会严重地震慑而的读进度。

夫学习材料内容最多,想把整挥毫到翻译下非常艰苦,只有经练习习题将一部分知识点串起来,详细学习Haskell还是预先看其他一些入门书籍吧,这仍开配套正在读还是对的。

第六章 Patterns of Computation — Composition, Folding, and Mapping

 

1 Suppose that post is a function that, given two letters, chooses
the one that follows the other in the alphabet

(post ’x’ ’y’ is ’y’; post ’u’ ’p’ is ’u’). Then the formula foldr1
post string delivers

a the letter from string that comes earliest in the alphabet

b the letter from string that comes latest in the alphabet

c the first letter from string

d the last letter from string

 

2 Suppose that && is an operator that, given two Boolean values,
delivers True if both are True and False otherwise.

Then the formula foldr1 (&&) [False, True, False, True, True]
delivers the value

a True

b False

c Maybe

d Nothing — the formula doesn’t make sense

 

3 In the formula foldr1 f [a, b, c, d]

a a, b, c, and d must have the same type

b f must deliver a value of the same type as its arguments

c f must be a function that requires two arguments

d all of the above

 

4 If f is a function that requires two arguments, then foldr1
f
is a function that requires

a no arguments

b one argument

c two arguments

d three arguments

 

5 The second argument of foldr1 must be

a a sequence

b a function

c a sequence of functions

d a function of sequences

 

6 If next is a function that, given a letter, delivers the next
letter of the alphabet, then the mapping process in the

formula [next c | c <- “hal”] delivers the string

a “lah”

b “ibm”

c “alm”

d “lha”

 

7 The string “is \”hot\” now”

a has four quotation marks in it

b has exactly two spaces and two back-slashes

c has 12 characters, including exactly two spaces

d has 14 characters, including exactly two spaces

 

=========================================================

=========================================================

1 b

foldr1凡是单相当强劲的内置函数,它可于一个列表内之各个半独因素中还插一个运算符。

如:foldr1 (+) [1..10]就是1+2+3+4+5+6+7+8+9+10,即返回55。

fold后面的字母r表示这个运算符是望右侧连接的(如何说?)。

图片 1

Haskell的雄强在于此列表不仅仅指数值,还好把函数连接起来,如foldr1
(.) [f, g, h]就(f . g . h),这里的f,g,h都是函数

用括号将一个运算符包起来,表示是一个函数,如(+)和(.)

使写成foldr1 . [f, g, h],就会把中的点解释成一个运算符,从而报错。

为此(+) 2 3也就是恃2+3,前面这种表达式在LISP语言中广泛。

foldr1 post “haskell”  == ‘s’

 

2 b

foldr1 (&&) [False, True, False, True, True]就是False && True && False
&& True &&  True,就是“与”运算,返回False

函数的中缀表示拟:div 5 2 == 5 `div`2。注意充分反向的`符号。

 

3 d

foldr1 f [a, b, c, d]

[a, b, c, d]列表必须要保内部的因素还是千篇一律栽档次,[1, “a”]会报错

函数f一定生零星单参数,两只参数与归值都是同样种类型,后面学了类型后,f的类型应该是a
–> a –> a。以前面的&&为例,a && b等价于(&&) a
b,注意&&要用括号引起来。

顾念看一个函数的色,可以于ghci(或winghci)中,执行:t
命令,后面和达到函数名称即可,例如 :t foldr1

得到:foldr1 :: (a -> a -> a) -> [a] –> a

 

4 b

foldr1有几只参数和f是井水不犯河水的,foldr1总是用2个参数,第一参数是一个函数(没错,函数也可以举行呢参数),第二只参数是一个列表

foldr1 f需要1个参数

 

5 a

foldr1的老二个参数是一个列表,这个列表可以是数值,也可是函数

倘若首先书写称的,foldr1 (+) [1,2,3,4]惨遭第二单参数是数值的列表

foldr1 (.) [f, g, h]面临第二只参数是函数的列表,f, g, h都是函数

 

6 b

next得到一个字母在字母表中的生一个假名

[next c | c <- “hal”]于”hal”中的诸一个字符c,都调用 next c
函数,得到”ibm”

 

7 c

字符串的表示法以及C语言基本上一样,在表示引号时索要因此转义符,”is
\”hot\” now”,有2个空格、2个引号、8个字母,共12个字符

 

 

《Two Dozen Short Lessons in
Haskell》学习(一)Hello
World

《Two Dozen Short Lessons in
Haskell》学习(二)Definitions

《Two Dozen Short Lessons in
Haskell》学习(三)How
to Run Haskell Programs

《Two Dozen Short Lessons in
Haskell》学习(四)List
Comprehensions

《Two Dozen Short Lessons in
Haskell》学习(五)Function
Composition and Currying

《Two Dozen Short Lessons in
Haskell》学习(六)Patterns
of Computation – Composition, Folding, and Mapping

《Two Dozen Short Lessons in Haskell》学习(七)-
Types

《Two Dozen Short Lessons in Haskell》学习(八)- Function Types,
Classes, and
Polymorphism

《Two Dozen Short Lessons in Haskell》学习(九)- Types of Curried
Forms and Higher Order
Functions

《Two Dozen Short Lessons in Haskell》学习(十)- Private Definitions —
the
where-clause

《Two Dozen Short Lessons in Haskell》学习(十一)-
Tuples

《Two Dozen Short Lessons in Haskell》学习(十二)
数值相关的接近

《Two Dozen Short Lessons in
Haskell》学习(十三)迭代及重新的正常化模式

《Two Dozen Short Lessons in
Haskell》学习(十四)截断序列及惰性求值

《Two Dozen Short Lessons in Haskell》学习(十五)- Encapsulation —
modules

《Two Dozen Short Lessons in Haskell》学习(十六)- Definitions with
Alternatives

《Two Dozen Short Lessons in Haskell》学习(十七) –
模块库

《Two Dozen Short Lessons in Haskell》学习(十八) –
交互式键盘输入和屏幕输出

《Two Dozen Short Lessons in Haskell》学习(十九) –
文件输入与出口

《Two Dozen Short Lessons in Haskell》学习(二十)-
分数

《Two Dozen Short Lessons in Haskell》学习(二十一)-
在形式参数中采用模式匹配

《Two Dozen Short Lessons in Haskell》学习(二十二)-
递归

第23章节没有练习。

《Two Dozen Short Lessons in
Haskell》(二十四)代数类型