【发布时间】:2021-07-22 06:28:33
【问题描述】:
如何获取元组列表中的元素? 例如
list = [(Tris, 23, 1.40), (Aif, 20 , 1.70)]
我想要所有年龄段的人
[23,20]
我知道我可以使用
age = (_,x,_) = x
但它只适用于元组,而不是列表中的元组。
【问题讨论】:
-
你的意思可能是:
age (_, x, _) = x。
标签: haskell
如何获取元组列表中的元素? 例如
list = [(Tris, 23, 1.40), (Aif, 20 , 1.70)]
我想要所有年龄段的人
[23,20]
我知道我可以使用
age = (_,x,_) = x
但它只适用于元组,而不是列表中的元组。
【问题讨论】:
age (_, x, _) = x。
标签: haskell
您将需要执行mapping,将列表中的每个项目映射到其年龄。
您可以使用map :: (a -> b) -> [a] -> [b] function 执行此操作,因此如下所示:
allAges = map …
我在哪里填写 … 作为练习。
【讨论】:
你可以像这样递归地解决它:
allages [] = []
allages ((_,x,_):xs) = x : allages xs
【讨论】:
我知道我可以用
age (_,x,_) = x但它只适用于元组而不是列表中的元组。
你为什么这么说?当然,如果你知道这一点
age (_,x,_) = x
那你也知道了
ages [(_,x,_)] = [x]
和
ages [(_,x,_), (_,y,_)] = [x,y]
ages [(_,x,_), (_,y,_), (_,z,_)] = [x,y,z]
....
等等。既然我们已经确定了这一点
ages [ (_,y,_), (_,z,_)] = [ y,z]
ages [ (_,z,_)] = [ z]
确实如此
ages [ ] = [ ]
我们可以写下这些方程式,
ages [ ] = [ ]
ages ([(_,x,_)] ++ moreTuples) = ages [(_,x,_)] ++ ages moreTuples
既然我们知道ages [(_,x,_)] = [x],那就是
ages [ ] = [ ]
ages ([(_,x,_)] ++ moreTuples) = [ x ] ++ ages moreTuples
所以现在剩下的就是使用: 运算符重写第一个等式的参数,使其有效的 Haskell 语法 遵循
[ a ] ++ moreTuples ==
a : moreTuples
你就完成了。
所以最后你确实知道该怎么做。
【讨论】: