问题描述
|
问题描述
我用下面的代码来
访问元组列表不是
得到为什么我得到这个错误是
...
我也想知道我是否
提供执行
mn::[(1,2,3),(6,7,8)]
我怎么能
(6,8)
?
纯功能
type rty= [(Int,Int,Int)]
mn::rty->Int
mn (a,b,c) = a
错误信息
Type error in explicitly typed binding
*** Term : (a,c)
*** Type : (a,c)
*** Does not match : rty
解决方法
rty与列表
[(a,b,c)]
相同。您正在匹配一个元组而不是一个列表。也许您想要的是:
mn [] = ?
mn ((a,c):xs) = ?
,
模式(a,c)
匹配三元组,而不是三元组列表(rty
)。
如果要访问三元组列表中的第二个元素,则必须使用某种递归解决方案(显式或通过库函数)。而是取决于mn
应该做什么。
, 您正在尝试匹配一个元组,而不是一个元组列表。我建议您更改类型:
mn :: (Int,Int,Int) -> Int
mn (a,_,_) = a
要访问列表的第n个元素,请像xs !! 2
中一样使用(!!)
。请注意,该功能不安全。也就是说,如果列表太短,则会引发异常。
, type rty = [(Int,Int)]
mn ::rty -> Int
mn ((a,c):xs) = a
由于rty是一个元组列表,因此必须从rty中获取一个元组,然后将其返回。