我需要对列表的每个元素应用一个操作。操作是“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