如果您采取f2 = map,您将立即进入您提出的第一步:
f2 (*) [1, 2, 3, 4] =
map (*) [1, 2, 3, 4] =
[(1 *), (2 *), (3 *), (4 *)]
现在给定这个乘法函数列表,我们需要
f1 [g1, g2, ..., gn] x =
[g1 x, g2 x, ..., gn x]
从那时起,我们可以应用它f2 (*) [1..4]来获得
f1 [(1 *), (2 *), (3 *), (4 *)] 5 =
[1 * 5, 2 * 5, 3 * 5, 4 * 5] =
[5, 10, 15, 20]
这就是你所追求的。
如果您查看f1,它看起来几乎像 a map,除了参数是flipped:
f1 = \gs x -> map h gs
现在我们只需要弄清楚是什么h。h需要具有类似功能的东西,(2 *)并为您提供将该功能应用于的结果5;即h = \g -> g 5。
把它们放在一起,我们得到
let f2 = map
f1 = \gs x -> map (\g -> g x) gs
in f1 (f2 (*) [1, 2, 3, 4]) 5