在haskell中实现拆分功能[Homework]

时间:2011-07-09 08:02:16

标签: haskell

我需要在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

告诉我我哪里错了?

4 个答案:

答案 0 :(得分:2)

splitx [] n应该是什么?计算机是如何知道的?

答案 1 :(得分:1)

如果要返回前n个元素:

对于n = 0且list不为空的输入,您没有模式匹配:

splitx _ 0 = []

注意:指定类型是通用的,因此它不仅适用于Ints:

splitx :: [a] -> Int -> [a]

答案 2 :(得分:1)

您收到的错误(实际警告,我相信)抱怨模式匹配(在=的左侧)并非详尽无遗。您需要为[]n作为参数的情况添加一个额外的案例。

答案 3 :(得分:1)

现在您的原始问题得到了解答,您是否必须使用递归和模式匹配来完成作业?如果没有,您会注意到splitxtake非常相似,但有相反的参数:

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"