Haskell 学习笔记(2)

新学了些东西记录下来
[color=violet]=====================元组============================
[/color]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"))



[color=red]===============================列表============================[/color]
列表内只能放置相同数据.
构建列表:

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...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值