《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还是先押其他一些入门书籍吧,比如说《Haskell趣学指南》,这仍开配套正在开练习还是相当不错的。

 

第一章 Hello World, Etc.

当即同样节中说道了2栽内置的数据类型data types,字符串String和布尔类型Boolean。

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

HASKELL COMMAND • reverse “Rambutan”

a “Natubmar”

b “tanbuRam”

c “Nambutar”

d natubmaR

 

2 How about this one?

HASKELL COMMAND • “frame” == reverse “emarf”

a True

b False

c Yes

d assigns emarf, reversed, to frame

 

3 And this one?

HASKELL COMMAND • “toh oot” == (reverse “too hot”)

a True

b False

c Yes

d no response — improper command

 

4 And, finally, this one?

HASKELL COMMAND • reverse (“too hot” == “to hoot”)

a True

b False

c Yes

d no response — improper command

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

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

答案:

1 d

字符串就是放在引号之间的同一差字符,如”Ringo”, “@#$%^”

以Haskell中之字符串实际上是字符的列表List,这点与C语言有些相似

“Rambutan”实际上就是是[‘R’, ‘a’, ‘m’, ‘b’, ‘u’, ‘t’, ‘a’,
‘n’],String是[Char]的语法糖

reverse是一个函数,函数称作和后的参数是故空格隔开的,C语言里之f(x,y)在haskell就是f
x y,一开始容许无绝适应。

reverse是haskell里就嵌入的一个函数,可以拿一个列表中装有因素反序排列。

reverse函数是真的多态的,参数不仅可能是字符串,还可是自由的List,reverse
[1,2,3]的结果相当[3,2,1]

函数称作一定是小写字母开头的,在haskell中把那个写字母开头的名强制认为是种类等任何东西。

进阶内容,reverse的源代码:

reverse                 :: [a] -> [a]
#ifdef USE_REPORT_PRELUDE
reverse                 =  foldl (flip (:)) []
#else
reverse l =  rev l []
  where
    rev []     a = a
    rev (x:xs) a = rev xs (x:a)
#endif

 

2 a

布尔项目Bool只收获2种值True, False

判断是否等用==

因此/=判断不齐,与C语言的!=是一个意思。

进阶内容:Bool实际上即便是一个简单的数量定义,源代码:

data Bool = False | True

 

3 a

reverse是函数function,”too hot”是操作数operation,函数运算是最优先的,

reverse “ELBA” == “ABLE”   与   (reverse “ELBA”) == “ABLE”是等价格的

 

4 d

reverse函数后面只能和一个列表,(“too hot” == “to
hoot”)这个价值是一个布尔值False,reverse函数需要的参数是List,所以reverse
False会在Haskell中报错。

 

 

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