Я недавно занимался F # (мой фон - C#), и я читаю сайт http://fsharpforfunandprofit.com, который я нахожу очень полезным.(Kestrel) K-combinator: зачем это полезно?
У меня есть http://fsharpforfunandprofit.com/posts/defining-functions/, который является разделом комбинаторов. Я понимаю их всех (хотя комбинатор Y или птица Sage закручивают мой разум!), За исключением пустельги. Скотт Wlaschin дает определение (в F #) как:
let K x y = x
Я не могу понять, за жизнь мне любой ситуации, в которой это было бы полезно. Сначала я думал, что он может использоваться как оператор цепи, так что вы можете передать значение функции, а затем вернуть исходное значение. Я написал такой оператор сам раньше, но, как вы можете видеть, что это не то же самое:
let (>|) x f = f x; x
Если мы частично применим K комбинатор (со значением 5), то мы получим обратно функцию, которая игнорирует свой аргумент и вместо этого возвращается 5. Опять же, не полезно.
(K 5) = fun y -> 5
Может ли кто-нибудь дать мне простой пример того, где это возможно использовать?
: D Посмотрите на это: https://en.wikipedia.org/wiki/SKI_combinator_calculus - это действительно просто академическая забава - даже если вы найдете некоторые виды использования в F #, вы не должны называть его просто 'K' ^^ – Carsten
BTW, если вы не нашли его сразу - 'K', например, используется для реализации таких вещей, как boolean, кортежи, числа, ... в SKI calculuse (ну это основной строительный блок;)) - просто подумайте это как вид проекции на первый компонент * – Carsten
Спасибо, я прочитал страницу в Википедии, но он не дал больше информации, чем я уже имел. – Richiban