新学了些东西记录下来
=====================元组============================
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...