`
xxi
  • 浏览: 65779 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Haskell 学习笔记(2)

阅读更多
新学了些东西记录下来
=====================元组============================
fst, snd

fst    提取元组第一元素
snd    提取元组第二元素

Hugs> fst ("hello", "world")
"hello"
Hugs> snd ("hello", "world")
"world"


注: 这个函数不能对2个以上数据的元组提取, 否则会出错

习题2: 使用fst, snd函数来提取元组((1,"a"),"Haskell")中的"a"
snd (fst((1,"a"),"Haskell"))



===============================列表============================
列表内只能放置相同数据.
构建列表:
Hugs> [1,2,3,4,5]
[1,2,3,4,5]
Hugs> 1:2:3:5:[]
[1,2,3,5]
Hugs> 0:[1,2,3,4]
[0,1,2,3,4]
Hugs> 'H':'a':'s':'k':'e':'l':'l':[]
"Haskell"
Hugs> ['H','a','s','k','e','l','l']
"Haskell"


在Haskell中,字符串只是一个带字符的列表.
几个基本的列表函数, length , head, tail
具体看:
Hugs> head ['H','a','s','k','e','l','l']
'H'
Hugs> tail ['H','a','s','k','e','l','l']
"askell"
Hugs> length ['H','a','s','k','e','l','l']
7


++     用于2个字符串相+
show   把值转换为字符串
read   把字符串转为数字

几个简单列表函数: map , filter, foldr, foldl, zip

先介绍:
Char.toUpper   将传入的参数转为大写
Char.isLower   判断字符是否是小写, 返回True or False

代码:
Prelude> map fst [(1, 2), (3, 4), (5, 6)]
[1,3,5]
Hugs> filter (< 4) [1 .. 5]
[1,2,3]
Prelude> zip [1 .. 5] ['a' .. 'e']
[(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')]
Hugs> foldl (-) 0 [1..5]
-15
Hugs> foldr (-) 0 [1..5]
3


注意:   ..  用于构建列表.
foldl    采用左结合,初始值在左  即:  ((((0-1)-2)-3)-4)-5
foldr    采用右结合,初始值在右  即:  1-(2-(3-(4-(5-0))))

foldl比foldr 效率要高
但是: foldr 可以边计算边得出值, foldl只能在计算到最后才能得出值

习题3: 利用map 将字符串"hELLO" 专为列表[True, False,False,False,False]
map Char.isLower "hELLO"


习题4:利用上面所学知识, 计算一个字符串小写字母的个数,如:"Hello" 返回4
length (filter Char.isLower "Hello")


习题6:写一个函数,它将计算一个长度大于2的包含元组的列表,
如:[(5,’b’),(1,’c’),(6,’a’)], 需要返回第2个元组,第一个元素,上列为1
PS:由于还没学函数,不知道怎么写.
SO:
fst (head (tail [(5,'b'),(1,'c'),(6,'a')]))



OK ,The end...
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics