首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个函数是如何工作的:康斯特康斯特(否定1) (否定2) 3

这个函数是如何工作的:康斯特康斯特(否定1) (否定2) 3
EN

Stack Overflow用户
提问于 2015-04-21 13:18:19
回答 2查看 246关注 0票数 4

我正在学习Haskell自动取款机,现在我找到了这个功能

代码语言:javascript
复制
const const (negate 1) (negate 2) 3

此函数的结果是-2.我不明白为什么结果不是-2。

代码语言:javascript
复制
const :: a -> b -> a
negate :: Num a => a -> a

所以我想我也可以这样设置括号: const (const (负1) (否定式2)) 3,但现在我得到-1作为结果。

我的错在哪里?我不明白,这是怎么回事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-21 13:30:41

Haskell解析规则非常简单。如果忽略infix运算符(+&&等),只有一条规则:

a b c d e被解析为(((a b) c) d) e

从来没有像你想象的那样,像a (b c d) e一样。(很少有这样的结果,可能是出于巧合,但通常情况下,类型检查器甚至没有意义。)

所以在你的例子中,你必须把它读成

代码语言:javascript
复制
( ( (const const) (negate 1) ) (negate 2) ) 3

其中const const简单地忽略了(negate 1),而是生成了const。它选择(negate 2)作为其const值,然后忽略3

票数 12
EN

Stack Overflow用户

发布于 2015-04-21 13:28:01

括号需要设置如下:

代码语言:javascript
复制
(((const const) (negate 1)) (negate 2)) 3

现在,(const const)a -> b -> c -> b类型的,应该清楚为什么结果是-2

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29773352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档