我需要对列表的每个元素应用一个操作。操作是" y =(3 * x)rem 16"。在这种情况下,我(我想)不能使用地图功能。
例如:
x = [0 1 2 3 4 5 6]
y = [0 3 6 9 12 15 2]
我是功能性编程的新手,尤其是haskell,所以我遇到了一些麻烦。
由于
答案 0 :(得分:4)
你绝对可以使用map
,你只需要定义要在列表上映射的功能。
fancypants x = (3*x) `rem` 16
ghci> map fancypants [0,1,2,3,4,5,6]
答案 1 :(得分:0)
使用列表推导:
[(3 * x) `rem` 16 | x <- data_source]
你也可以试试这个,虽然它看起来不太可读,但它涉及map
:
map ((flip rem) 16) $ map (3*) data_source
以下是它的工作原理:
map (3*) data_source
将data_source
的每个元素乘以3,非常简单map ((flip rem) 16) $ stuff
将函数((flip rem) 16)
应用于stuff
的每个元素
(flip rem) 16
是一个参数x
的函数,用于计算rem x 16
现在,您可以使用rem 16
代替那个flip
ping商家,但在这种情况下,该函数会返回rem 16 x
,而不是{39}你想要什么。
你也可以使用它,它看起来比第二个版本更清晰:
map (((flip rem) 16) . (3*)) data_source
.
中的点(function1 . function2
)创建了一个复合函数,其作用如下:function1 $ function2 x
。