這個問題在這里已經有了答案: 對串列中的每個第二個元素應用一個函式 6 個回答 6 天前關閉。
我現在開始學習 haskell,但我有一個案例,我找不到解決它的解決方案
案例:
list = [4, 9, 2, 4, 2]
想成為:
list = [4, 18, 2, 8, 2]
這就像只在奇數索引上乘以 2,我們可以在 Haskell 中這樣做嗎?
uj5u.com熱心網友回復:
你可以說,交織無限串列id,并(2*)用cycle [id, (2*)],然后我們通過將這些功能的元素zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]:
zipWith ($) (cycle [id, (2*)]) [4, 9, 2, 4, 2]
uj5u.com熱心網友回復:
您可以遞回地定義此函式。只需考慮在一個空串列、一個包含一個元素的串列、一個包含兩個或更多元素的串列上呼叫它會產生什么結果。
map_odd :: (a -> a) -> [a] -> [a]
map_odd f [] = []
map_odd f [x] = [x]
map_odd f (a:b:l) = a : f b : map_odd f l
注意 functionf需要有 type a -> a,而不是 generic a -> b,因為它只應用于串列中的某些元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404603.html
標籤:
