我需要在haskell中实现split函数,其中user以示例输入
splitx [1,2,3,4,5,6] 3
应输出 - > [1,2,3]
splitx::[Int]->Int->[Int]
splitx [] 0 = []
splitx (x:xs) n = x: splitx xs (n-1)
我写了以下函数,但它给出了一个错误
Non-exhaustive patterns in function Main.splitx
告诉我我哪里错了?
答案 0 :(得分:2)
splitx [] n
应该是什么?计算机是如何知道的?
答案 1 :(得分:1)
如果要返回前n个元素:
对于n = 0且list不为空的输入,您没有模式匹配:
splitx _ 0 = []
注意:指定类型是通用的,因此它不仅适用于Ints:
splitx :: [a] -> Int -> [a]
答案 2 :(得分:1)
您收到的错误(实际警告,我相信)抱怨模式匹配(在=的左侧)并非详尽无遗。您需要为[]
和n
作为参数的情况添加一个额外的案例。
答案 3 :(得分:1)
现在您的原始问题得到了解答,您是否必须使用递归和模式匹配来完成作业?如果没有,您会注意到splitx
与take
非常相似,但有相反的参数:
GOA> let splitx = flip take
GOA> splitx [1,2,3,4,5,6] 3
[1,2,3]
GOA> splitx [1,2,3,4,5,6] 0
[]
GOA> splitx [] 3
[]
GOA> splitx "abcde" 3
"abc"