「学习总结-Haskell-3] Haskell常用数据结构

Haskell 常用数据结构

3 Haskell 常用数据结构

3.1 Tuple是什么

Tuple就是二元组,三元组,等等,组内元素可以为不同类型,而List元素必须为同一类型

ghci>(1,2)
(1,2)
ghci>('h','i','j')
('h','i','j')
ghci>(1,'a',3.5)
(1,'a',3.5)

下面这个例子说明了Tuple内元素的类型决定了Tuple的类型,即 (1,2)和('a','b')虽然都是二元组,但是不是同一类型 (1,2)和(1,2,3)虽然元素类型一样,但是数目不同,也不是同一类型

ghci>[(1,2),(3,4),(5,6)]
[(1,2),(3,4),(5,6)]
ghci>[(1,2),('a','b')]
error
ghci>[(1,2),(3,4,5)]
error

3.2 Pair

3.2.1 Pair 是什么

Pair就是二元组

ghci>(1,2)
(1,2)
ghci>(3,4)
(3,4)
3.2.2 与Pair有关的函数
  • fst/snd
ghci>fst (2,3)
2
ghci>snd (2,3)
3
  • zip
ghci>zip [1,2,3] ['a','b','c']
[(1,'a'),(2,'b'),(3,'c')]
ghci>zip [1..] ["Apple","Moto","Nokia"]
[(1,"Apple"),(2,"Moto"),(3,"Nokia")]

3.3 用Tuple编写程序

例1 约束性编程,找出三边在[1,10]内的所有直角三角形

ghci>[(a,b,c) | a <- [1..10], b <- [1..a], c <- [1..b], b^2 + c^2 == a^2]
[(5,4,3),(10,8,6)]

例2 Tuple与模式匹配

first (x,_,_) = x
second (_,y,_) = y
third (_,_,z) = z
ghci>first ('a',3,6.7)
'a'
ghci>second ('a',3,6.7)
3
ghci>third ('a',3,6.7)
6.7

例3

sumPair xs = [x + y| (x,y) <- xs ]
ghci>sumPair [(1,2),(3,4),(5,6)]
[3,7,11]
sumPair' xs = [z | (x,y) <- xs, let z = x + y]

注意:不能直接写成z = x + y

ghci>sumPair' [(1,2),(3,4),(5,6)]
[3,7,11]

例4

zip' _ [] = []
zip' [] _ = []
zip' (x:xs) (y:ys) = (x,y):zip' xs ys
ghci>zip' [1..] ["Apple","***","MI"]
[(1,"Apple"),(2,"***"),(3,"MI")]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值