在没有内置函数的情况下从Haskell中的列表开头提取元素

时间:2018-04-22 04:50:50

标签: haskell

我想编写一个函数,从Haskell中的列表开头提取n个元素。我知道它可以使用内置的“take”功能来完成,我已经完成了它,它可以工作。但是,我似乎无法写一个功能而不采取。 这是我的代码。

takeElem' :: Int -> [t] -> [t]
takeElem' _ [] = []
takeElem' n (x:xs) = [x] ++ takeElem' (n-1) xs

这段代码很好,但是当我测试它时,例如

takeElem' 3 "hello"

它返回“hello”而不是“hel”

知道可能出现什么问题吗?

2 个答案:

答案 0 :(得分:2)

我没有添加在n为零的情况下应该发生的事情。我刚刚添加了

takeElem' 0 list = []

现在有效。

答案 1 :(得分:0)

它应该是0 _而不是_ []。 因为当你的n达到0时,当你拿走列表的所有内容而不是[]时,你说它是[]。