我想编写一个函数,从Haskell中的列表开头提取n个元素。我知道它可以使用内置的“take”功能来完成,我已经完成了它,它可以工作。但是,我似乎无法写一个功能而不采取。 这是我的代码。
takeElem' :: Int -> [t] -> [t]
takeElem' _ [] = []
takeElem' n (x:xs) = [x] ++ takeElem' (n-1) xs
这段代码很好,但是当我测试它时,例如
takeElem' 3 "hello"
它返回“hello”而不是“hel”
知道可能出现什么问题吗?
答案 0 :(得分:2)
我没有添加在n为零的情况下应该发生的事情。我刚刚添加了
takeElem' 0 list = []
现在有效。
答案 1 :(得分:0)
它应该是0 _而不是_ []。 因为当你的n达到0时,当你拿走列表的所有内容而不是[]时,你说它是[]。