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