【问题标题】:Haskell: Understanding function application operator when used with map functionHaskell:与 map 函数一起使用时了解函数应用运算符
【发布时间】:2019-06-14 01:30:29
【问题描述】:

我有以下 Haskell 表达式:

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

我知道函数应用运算符 ($) 将函数应用于给定参数。然而,由于 (-)、(+) 和 (*) 函数有两个参数,通过 map 将这些函数应用于 5,这些函数被部分应用。

结果列表将包含三个接受另一个参数的函数:

(1) 从5中减去参数

(2) 将参数添加到5

(3) 将参数乘以 5

但是说上面的表达式等价于下面的表达式是否有效?

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

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

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

感谢任何见解。

【问题讨论】:

  • 是的,你的解释是正确的。

标签: haskell functional-programming higher-order-functions


【解决方案1】:

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

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

制作[5-4, 5 + 4, 5 * 4]

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

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

(-) 5 带有“-”括号的原因是为了防止编译器认为您的意思是“负五”,一个负数,(- 5) 的通常解释)。

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2017-04-28
    • 2020-12-10
    相关资源
    最近更新 更多