Haskell:当与map函数一起使用时理解函数应用运算符

3

我有以下的Haskell表达式:

map ($ 5) [(-),(+),(*)]

我知道函数应用运算符($)将函数应用于给定的参数。然而,由于(-)、(+)和(*)函数需要两个参数,通过将这些函数应用于5,函数被部分应用。
生成的列表将包含三个函数,它们需要另一个参数:
(1) 从5中减去参数
(2) 将参数加到5上
(3) 将参数乘以5
但是,可以说上述表达式等同于以下表达式吗?Original Answer翻译成"最初的回答"
[(5 -),(5 +),(5 *)]

我认为这是正确的,因为我在GHCI中检查了(5 -)、(5 +)和(5 *)的类型,它们都是接受一个数字并返回一个数字的函数:

Original Answer翻译成"最初的回答"

(5 -) :: Num a => a -> a
(5 +) :: Num a => a -> a
(5 *) :: Num a => a -> a

Any insights are appreciated.


2
是的,你的解释是正确的。 - duplode
1个回答

5

正确;您也可以通过以下方式再次应用运算符:

map ($4) $ map ($ 5) [(-),(+),(*)]

生成 [5-4, 5 + 4, 5 * 4]

此外,你可以在运算符右侧指定参数,得到相同的结果:

[((-) 5),(+ 5),(* 5)]

在这里,(-) 5 中的符号“-”被括起来是为了防止编译器将其解释为一个负数“减去五”,而不是一个无参函数调用的语法。所以,(- 5) 表示一个没有参数的函数调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接