我正在尝试编写一个函数来检索列表中的第n个元素。使用Haskell在列表中查找第n个元素
这是我到目前为止有:
main :: IO()
main = do print (nth 3 [1,2,10])
nth _ [] = []
nth a (x:xs)
| (a == 1) = x
| otherwise = nth (a-1) xs
这是错误我得到:
Error occurred
ERROR line 2 - Cannot justify constraints in explicitly typed binding
*** Expression : main
*** Type : IO()
*** Given context :()
*** Constraints : (Show a, Num [a])
试着写了'nth'类型注释(这是一个很好的做法反正)。这应该使问题更加明显。 –
为什么你不使用xs! n? –
既然你希望'nnth'返回列表的一个*元素*,你一定希望它具有类型'Int - > [a] - > a',对吧?那么,你的第一个定义是'nnth_ [] = []',它是一个* list *(或者“返回一个列表”,如果你愿意的话),所以它定义了一个类型为'Int-> [a] - > [a]'。那么,什么*应该*'nth'做一个空列表?这是个好问题!一种方法是简单地让它失败,另一种方法是给它返回类型'Maybe a',如果列表太短,则返回'Nothing'。 – gspr