longEnough n xs
:检查列表是否有多个n
元素。如何解决longEnough ?.在Haskell中
例子:
longEnough 2 [1..5] == True
longEnough 3 [1,2,3] == False
longEnough 0 [] == False
longEnough 20 [1..] == True
longEnough n xs
:检查列表是否有多个n
元素。如何解决longEnough ?.在Haskell中
例子:
longEnough 2 [1..5] == True
longEnough 3 [1,2,3] == False
longEnough 0 [] == False
longEnough 20 [1..] == True
我想这是功课,你仍然在学习的基础知识,所以我会通过给启动你使用递归的一些提示而不是foldr
(如@dfeuer建议):
首先开始注意到其他一些明显的例子:
xs = []
那么结果总是False
(假设你不关心一些奇怪的方式消极n
)n = 0
和xs
非空,那么它总是True
n > 0
xs
比一个元素也许你有更多一些递归理念,打破过去的情况下?
这里是一个骨架:
longEnough :: Int -> [a] -> Bool
longEnough _ [] = False
longEnough 0 _ = True
longEnough n (_:xs) = let n' = (n-1) in undefined
对于这些情况 - 如果你仔细你会看到,我甚至增加了更多的线索上的解决方案。
n
,什么应该发生的那些...我没有不这里foldr
是所有关于你应该可能试图使用foldr
也可以实现似乎没有更多的反馈从OP来,所以我想我可以和发布解决方案,我会开始:
longEnough :: Int -> [a] -> Bool
longEnough _ [] = False
longEnough 0 _ = True
longEnough n (_:xs) = longEnough (n-1) xs
(并不是真正意义上剩下的事情.. 。)
下面是提到的测试用例:
λ> longEnough 2 [1..5]
True
λ> longEnough 3 [1,2,3]
False
λ> longEnough 0 []
False
λ> longEnough 20 [1..]
True
有何评论? ? – user5511358
请参阅[有任何方法来分离无限列表和有限列表吗?](http://stackoverflow.com/questions/33016410/is-there-any-way-to-separate-infinite-and-finite-lists) – user3237465
使用'foldr'。折叠列表以产生一个采用所需严格的较低长度限制的函数。 – dfeuer