如何解决在Haskell中显式键入绑定问题
| 问题描述 我用下面的代码来 访问元组列表不是 得到为什么我得到这个错误是 ... 我也想知道我是否 提供执行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中获取一个元组,然后将其返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。