我有一個面試問題,從那時起它一直在竊聽我。如何在列表的長度上遞歸地調用一個函數?
我有一個函數,填充,做計算就像取兩個列表,然後在第二個列表中替換2s,其中第一個列表中有2個,並且第一個列表中的第二個列表中還有一個2s被填充列表,那麼它可以流動直到遇到1。例如:
兩個列表[2,1,2,1,2]
[0,0,1,0,0]
通過了,所以我得到的輸出是[2,2,1,2,2]
。現在,我想寫一個函數,它的參數是這樣的:[[2,1,2,1,2],[0,0,1,0,0],[0,0,0,0,0]]
,我想遞歸地應用我的上面的函數,直到這個列表的末尾。所以像第一個[2,1,2,1,2]
[0,0,1,0,0]
都通過填寫,那麼它應該得到結果[2,2,1,2,2]
,那麼應該通過[2,2,1,2,2]
和[0,0,0,0,0]
,得到結果[2,2,2,2,2]
。我怎樣才能做到這一點?
編輯:
我這樣做:
fillAll::[[Int]]->[Int]
fillAll [] = []
fillAll (x:xs) =
(foldl' seep x xs) $
helper2 x
helper2:: [Int] -> Bool
helper2 lst =
if 2 `elem` lst then True else False
也許使用fold? – Mephy 2014-11-03 16:38:42
'helper2 [foldl'seep x xs]'desugars to'if foldl'seep x xs == 2 then True else False',which'foldl'seep x xs == 2' – user3237465 2014-11-03 18:10:54