4

我对该函数的一个特定示例感到困惑const。所以类型声明声明const :: a -> b->a该函数接受两个类型参数ab返回一个类型a。例如:

const 5 3 => 5
const 1 2 => 1

根据声明,这是有道理的。但是,我遇到了这个具体的例子:

const (1+) 5 3 => 4

这让我质疑我对函数声明的理解。我知道这个函数只需要两个参数,因为我试过:

const 1 5 3 

现在这让我放心,它只需要 2 个参数。那么这是如何工作的呢?不是(1+)参数吗?如果不是,那是什么?

const (1+) 5 3 => 4
4

1 回答 1

11

我知道这个函数只需要两个参数(…)

Haskell 中的每个函数都有一个参数。事实上,如果你写:

 const 5  1

那么这是缩写:

(const 5) 1

类型签名const :: a -> b -> a是一种更紧凑的const :: a -> (b -> a).

因此,const 5将创建一个忽略参数(此处1)并返回给定值的函数5

现在,const (1+) 5 3因此,我们写道:

((const (1+)) 5) 3

const (1+)因此将构造一个忽略参数并返回 的函数(1+),因此const (1+) 5(1+)。因此,我们计算:

(1+) 3

这是4

于 2020-03-04T21:06:41.607 回答