我需要對列表的每個元素應用一個操作。操作是「y =(3 * x)rem 16」。在這種情況下,我(想我)不能使用地圖功能。如何將更復雜的操作應用於列表的每個元素?
例:
x = [0 1 2 3 4 5 6]
y = [0 3 6 9 12 15 2]
我funcional編程很新,特別是Haskell的,所以我遇到一些麻煩一點。
感謝
我需要對列表的每個元素應用一個操作。操作是「y =(3 * x)rem 16」。在這種情況下,我(想我)不能使用地圖功能。如何將更復雜的操作應用於列表的每個元素?
例:
x = [0 1 2 3 4 5 6]
y = [0 3 6 9 12 15 2]
我funcional編程很新,特別是Haskell的,所以我遇到一些麻煩一點。
感謝
使用列表理解:
[(3 * x) `rem` 16 | x <- data_source]
你也可以試試這個,雖然它可能看起來不是那麼可讀的,但它涉及map
:
map ((flip rem) 16) $ map (3*) data_source
這裏的它是如何工作的:
map (3*) data_source
乘以3的data_source
每個元素,非常簡單map ((flip rem) 16) $ stuff
功能((flip rem) 16)
適用於stuff
(flip rem) 16
每個元素是一個參數x
的一個函數,計算的rem x 16
現在,您可以使用rem 16
而不是flip
ping業務,但在這種情況下,函數將返回rem 16 x
,而不是您想要的。
你也可以利用這一點,它看起來比第二版更清潔了一下:
map (((flip rem) 16) . (3*)) data_source
的點(.
),如function1 . function2
創建其工作方式如下的複合函數:function1 $ function2 x
。
你絕對可以使用map
,你只需要定義你想要在列表上映射的函數。
fancypants x = (3*x) `rem` 16
ghci> map fancypants [0,1,2,3,4,5,6]
*爲什麼*你認爲你不能使用'map'? – crockeea