gpt4 book ai didi

haskell - 为什么map (^2) xs 和map (2^) xs 在Haskell 中都能按预期工作?

转载 作者:行者123 更新时间:2023-12-02 17:32:39 26 4
gpt4 key购买 nike

为什么

map (^2) [1..10]

工作还有

map (2^) [1..10]

工作?

我希望它只适用于其中一个,而不适用于两者。

我认为 map 会迭代 [1..10] 的所有元素,然后执行

[1^2, 2^2, 3^2, ...]

对于 map (^2) [1..10]。然后我期望当给定 map (2^) [1..10] 时,它会产生语法错误或其他错误,因为它需要数字位于 之后>^,不是之前。

最佳答案

Haskell 语法对这样的构造有特殊支持,称为“运算符部分”。如果您有任何中缀运算符,例如 #$%,则支持以下表示法:

(#$%)   = \x y -> x #$% y
(#$% y) = \x -> x #$% y
(x #$%) = \y -> x #$% y

所以你期望一些数学一致性来打破这个,如果 Haskell 是像 Forth 这样的微型语言,我会倾向于同意你的直觉。它起作用的原因基本上是“因为他们编写它就是为了那样工作”。

(添加它也是为了减少歧义 - f + x 是指应用于两个参数的 f,还是指 + 应用于两个参数?既然它实际上意味着后者,那么我们如何表示前者?答案:使用 () 引入运算符部分。)

关于haskell - 为什么map (^2) xs 和map (2^) xs 在Haskell 中都能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com