最近我試圖解決使用Foldr的問題。任務如下:Foldr應用程序
In:[5,1,3,8,2,4,7,1]
Out:[16,8]
這意味着,我會加倍那些在奇數索引位置甚至數位的輸入列表元素。我寫的程序,而無需使用這是繼foldr相似:(它顯示模式匹配失敗:頭[])
findPos list elt =
map fst $ filter ((elt==).snd) $ zip [0..] list
doublePos [] = []
doublePos (x:xs)
| ((head(findPos xs x)`mod` 2) /= 0) && (x `mod` 2 == 0) =
[2*x] ++ doublePos xs
| otherwise = doublePos xs
我怎樣寫用foldr這個計劃?
這是一個奇怪的任務......這不是作業,對不對?嚴重的是,用'foldr'來做這件事只會讓它變得無法理解而沒有任何好處。我只是一步一步地做到這一點:刪除偶數索引的元素,刪除奇數條目,將剩餘值加倍,完成。 '地圖(* 2)。甚至過濾。 remAtEvenPos'' where remAtEvenPos(a:b:l)= a:l; remAtEvenPos l = l'。這就是慣用的Haskell解決方案。 – leftaroundabout
@leftaroundabout thnx您的建議。但作爲初學者,我嘗試使用foldr來解決問題。 – sabu
@leftaroundabout,你的意思是'remAtEvenPos(a:_:l)= a:remAtEvenPos l'? – huon