Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “为什么?”;(`subtract`)12“;失败?_Haskell - Fatal编程技术网

Haskell “为什么?”;(`subtract`)12“;失败?

Haskell “为什么?”;(`subtract`)12“;失败?,haskell,Haskell,如果回勾将前缀函数更改为中缀,括号将中缀函数更改为前缀,则: 在语法上,为什么(`subtract`)12会失败?反勾号是“语法而已”。这是一种说他们是黑客的方式。Haskell的设计人员没有尝试构建一个处处一致的机制,而是选择了一个简单的技巧作为语法糖 遗憾的是,没有比这更有趣的答案了。尽管“反勾号将前缀转换为中缀,括号将中缀转换为前缀”是一种方便的思维捷径,但它并不是哈斯克尔语法的精确描述。对于这一点,您应该转向,这表明可以放在反勾号(或括号)内的类是非常有限的。backticks中唯一允许

如果回勾将前缀函数更改为中缀,括号将中缀函数更改为前缀,则:

在语法上,为什么
(`subtract`)12
会失败?

反勾号是“语法而已”。这是一种说他们是黑客的方式。Haskell的设计人员没有尝试构建一个处处一致的机制,而是选择了一个简单的技巧作为语法糖


遗憾的是,没有比这更有趣的答案了。

尽管“反勾号将前缀转换为中缀,括号将中缀转换为前缀”是一种方便的思维捷径,但它并不是哈斯克尔语法的精确描述。对于这一点,您应该转向,这表明可以放在反勾号(或括号)内的类是非常有限的。backticks中唯一允许使用的是简单标识符,同样,对于以中缀事物为前缀的括号也是如此。

只是一个猜测,但由于它是不必要的,而且它会打开像
1`(`(`(`subtract`)`)`2
afair这样的邪恶之门,backticks至少需要一个参数
(1`subtract`)2
应该可以工作……特别是像
(`map`[1..9])
这样的东西可以工作,而且比
翻转贴图[1..9]
\f->map f[1..9]
IMO更好。回答得好。我投了赞成票。另一个答案提供了额外的参考。@modeller当然,Haskell 2010比Haskell 98更受欢迎。我已经更新了链接,谢谢你指出。