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更受欢迎。我已经更新了链接,谢谢你指出。