第一次发帖,但这个网站对我帮助很大。
我正在努力学习 Haskell。
这是我被要求回答的问题。
编写一个函数,该函数接受长度对的列表(长度 >=2)并返回列表中第二个元素的第一个组件。因此,当提供 [(5,'b'), (1,'c'), (6,'a')] 时,它将返回 1。
我自己已经这样做了。
listtwo :: [([a],b)] -> [a]
listtwo [] = []
listtwo [(a,b)] = fst (head (tail [(a,b)]))
我正在尝试获取我相信的列表元组列表,并从列表中的第二项返回第一个元素。我知道如果您取出 [(a,b)] 并将第二个 [(a,b)] 替换为问题中的列表,它可以正常工作。但是当我试图让这个函数适用于任何元组列表时。我得到错误。
我收到的错误
<interactive>:1:27:
No instance for (Num [a0])
arising from the literal `6'
Possible fix: add an instance declaration for (Num [a0])
In the expression: 6
In the expression: (6, 'a')
In the first argument of `listtwo', namely
`[(5, 'b'), (1, 'c'), (6, 'a')]'
所以我问是否有人可以帮助我解决错误并解释我做错了什么(不要给我答案,不能这样学习)。
感谢帮助,如果得到回答,可能会有更多问题。非常感谢您!