这个组合器是什么?
What is this combinator?
我使用了组合器来计算一列数字的平均值...
const myCombinator = f => g => h => x => f(g(x))(h(x));
然后我可以像这样使用它...
const div = a => b => a/b;
const sum = a => a.reduce((a, n) => a + n, 0);
const length = a => a.length();
const average = myCombinator(div)(sum)(length);
console.log(average([1, 2, 3, 4, 5, 6, 7, 8, 9]));
但是,我不确定这是列表中的哪个组合器... http://www.angelfire.com/tx4/cus/combinator/birds.html
最初有人告诉我这是一个 Blackbird 组合器,但我不认为是这样吗?对吗?
它是 "named" 组合器吗?如果有,你知道是哪一个吗?
来自评论
黑鸟的定义如下... blackbird :: (c -> d) -> (a -> b -> c) -> a -> b -> d
但是,我认为我的功能就像...
myCombinator :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
即它 returns 一个接受 a
和 returns 一个 d
的函数。 a
被传递到创建 b
和 c
的两个函数中。然后将它们传递到 returns d
.
的函数中
经过以上评论
我找到了!从 @evolutionxbox link 我找到了 Starling_
组合器...
starling_ :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
这正是我上面写的:D
感谢@evolutionxbox 的帮助link,我能够找到定义为...
的Starling_
组合子
starling_ :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
就我而言...
a -> b
是我的 sum
函数,它接受数组和 returns 一个数字。
a -> c
是我的 length
函数,它接受数组和 return 一个数字。
b -> c -> d
是我的 div
函数,它接受两个数字并将它们相除。
这是我第一次觉得我现在已经正确理解了组合器。 :)
感谢您的帮助:)
我使用了组合器来计算一列数字的平均值...
const myCombinator = f => g => h => x => f(g(x))(h(x));
然后我可以像这样使用它...
const div = a => b => a/b;
const sum = a => a.reduce((a, n) => a + n, 0);
const length = a => a.length();
const average = myCombinator(div)(sum)(length);
console.log(average([1, 2, 3, 4, 5, 6, 7, 8, 9]));
但是,我不确定这是列表中的哪个组合器... http://www.angelfire.com/tx4/cus/combinator/birds.html
最初有人告诉我这是一个 Blackbird 组合器,但我不认为是这样吗?对吗?
它是 "named" 组合器吗?如果有,你知道是哪一个吗?
来自评论
黑鸟的定义如下... blackbird :: (c -> d) -> (a -> b -> c) -> a -> b -> d
但是,我认为我的功能就像...
myCombinator :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
即它 returns 一个接受 a
和 returns 一个 d
的函数。 a
被传递到创建 b
和 c
的两个函数中。然后将它们传递到 returns d
.
经过以上评论
我找到了!从 @evolutionxbox link 我找到了 Starling_
组合器...
starling_ :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
这正是我上面写的:D
感谢@evolutionxbox 的帮助link,我能够找到定义为...
的Starling_
组合子
starling_ :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
就我而言...
a -> b
是我的sum
函数,它接受数组和 returns 一个数字。a -> c
是我的length
函数,它接受数组和 return 一个数字。b -> c -> d
是我的div
函数,它接受两个数字并将它们相除。
这是我第一次觉得我现在已经正确理解了组合器。 :)
感谢您的帮助:)