cen*_*980 3 haskell functional-programming higher-order-functions
我有以下 Haskell 表达式:
map ($ 5) [(-),(+),(*)]
Run Code Online (Sandbox Code Playgroud)
我知道函数应用运算符 ($) 将函数应用于给定参数。然而,由于(-)、(+)和(*)函数采用两个参数,因此通过map将这些函数应用到5,这些函数被部分应用。
结果列表将包含三个带有另一个参数的函数:
(1) 从5中减去参数
(2) 将参数加到5
(3) 将参数乘以5
然而,上面的表达式等价于下面的表达式是否有效?
[(5 -),(5 +),(5 *)]
Run Code Online (Sandbox Code Playgroud)
我认为这是正确的,因为我在GHCI中检查了(5 -)、(5 +)和(5 *)的类型,它们都是接受数字并返回数字的函数:
(5 -) :: Num a => a -> a
(5 +) :: Num a => a -> a
(5 *) :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)
任何见解表示赞赏。
正确的; 您还可以通过以下方式再次应用运算符:
map ($4) $ map ($ 5) [(-),(+),(*)]
Run Code Online (Sandbox Code Playgroud)
生产[5-4, 5 + 4, 5 * 4]
此外,您可以在运算符右侧指定参数,得到相同的结果:
[((-) 5),(+ 5),(* 5)]
Run Code Online (Sandbox Code Playgroud)
(之所以(-) 5
有“-”括号,是为了防止编译器认为您的意思是“负五”,负数,通常的解释(- 5)
)。