努力理解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
答案 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 * Q
是x z
,P
是y z
。
我们知道(来自Q
和x z
)y z
和x
都是函数,如果y
的类型是z
,我们有
R
填写此内容我们的类型为
x : R -> P
y : R -> Q
我们可以将其重命名为
(R -> P) -> (R -> Q) -> R -> P * Q
x y z result
答案 1 :(得分:0)
添加@ molbdnilo的答案:注意“ - >”是正确的联想