C语言《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还是优先押另外一些入门书籍吧,这按照开配套正在学还是不错的。

 

第二章 Definitions

1 How does the Haskell system respond to the following command?

HASKELL DEFINITION • word = reverse “drow”

HASKELL COMMAND • word

a True

b False

c “word”

d “drow”

 

2 How about this command?

HASKELL DEFINITION • isTrue str = str == “True”

HASKELL COMMAND • isTrue (reverse “Madam, I’m Adam.”)

a True

b False

c “.madA m’I ,madaM”

d Type error in application

 

3 And this one (assuming the definitions in questions 1 and 2 have been
made)?

HASKELL COMMAND • isTrue word

a True

b False

c “drow”

d Type error in application

 

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

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

答案:

1 c

“=”在haskell中之所以来表示函数定义,“=”的左侧是函数名称以及式参数(更强劲的凡模式pattern),右边是函数的概念。

a=1于C语言中凡不行简短的赋值语句,而于Haskell中发出差之义,a永远是1,它是不可变更的。

Haskell会机动测算函数的返路,这里的word实际上是一个字符串,即字符列表

Haskell程序是纯函数式语言,所以任何皆函数,Haskell程序绝大部分都是同堆函数定义语句

 

2 b

isTrue str定义了一个函数,名称是isTrue,str是一个款式参数

str ==
“True”是函数体,就是判断str与”True”字符串是不是当,返回值是布尔档次True或False

isTrue (reverse “Madam, I’m
Adam.”)是实施一个函数调用,括号是须的,如果没括号,haskell会把reverse当成isTrue的一个参数,就会见报语法错误

reverse “Madam, I’m Adam.”的结果是”.madA m’I
,madaM”,显然不顶”True”字符串

“True”是一个字符串,而True是意味着也真布尔项目

 

3 b

word是一个函数名称,根据她的定义,这里为一个字符串,实际上是”word”

“word”与”True”显然不齐,所以结果回到False

 

修被判断是否也扭曲文字符串的函数:isPalindrome phrase = (phrase == reverse
phrase)

出于是多态的,还可看清回文数字串。

isPalindrome  [1,2,3,2,1]

True

 

《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》(二十四)代数类型