Я использовал комбинатор, чтобы вычислить среднее из списка чисел ...
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 определяется как ... blackbird :: (c -> d) -> (a -> b -> c) -> a -> b -> d
Однако, Я думаю, что моя функция работает как ...
myCombinator :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
, т.е. она возвращает функцию, которая принимает a
и возвращает d
. a
передается в две функции, которые создают b
и c
. Затем они передаются в функцию, которая возвращает d
.
После вышеприведенного комментария
Я нашел это! Из @ evolutionxbox link я нашел Starling_
комбинатор ...
starling_ :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
Именно то, что я написал выше: D