ML中的高阶函数

时间:2017-12-07 20:31:15

标签: ml

努力理解ml中的高阶函数。

> fn a => fn b => fn c => (a c,b c);
val it = fn: ('a -> 'b) -> ('a -> 'c) -> 'a -> 'b * 'c

有人可以向我解释这项工作的方式。我不明白" a"转到" c"第二部分。我相信输出应该是:

val it = fn:  a -> b -> c -> a * c -> b * c    

2 个答案:

答案 0 :(得分:2)

db.col.aggregate([ {$project: {compareResult: {$cmp: ['$field','$maxValue']}}}, {$match: {compareResult: -1, field: {$gt: 0}}} ]) a显然是函数,因此b'a对于它们来说过于笼统。
此外,'b是一对,但您已经为它指定了类型(a c, b c) - 从成对到对的函数。

让我们重命名函数中的内容,以便更容易区分参数的名称:

'a * 'c -> 'b * 'c

当您确定某个功能的类型时,从结果开始并向后退向参数通常是一个好主意。

很明显,这个结果> fn x => fn y => fn z => (x z, y z); val it = fn: ('a -> 'b) -> ('a -> 'c) -> 'a -> 'b * 'c 是一对 我们说它的类型是(x z, y z) - 也就是说,P * Qx zPy z。 我们知道(来自Qx zy zx都是函数,如果y的类型是z,我们有

R

填写此内容我们的类型为

x : R -> P
y : R -> Q

我们可以将其重命名为

(R -> P) -> (R -> Q) -> R -> P * Q
   x           y        z    result

答案 1 :(得分:0)

添加@ molbdnilo的答案:注意“ - >”是正确的联想