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