Недавно я занимался F # (мой фон - С#), и я читаю сайт http://fsharpforfunandprofit.com, который я нахожу очень полезным.
Я должен http://fsharpforfunandprofit.com/posts/defining-functions/, который является разделом комбинаторов. Я понимаю их всех (хотя винтовка Y combinator или Sage с моим умом!), За исключением пустельги. Скотт Wlaschin дает определение (в F #) как:
let K x y = x
Я не могу понять для жизни меня любую ситуацию, в которой это было бы полезно. Сначала я думал, что он может использоваться как оператор цепи, так что вы можете передать значение функции, а затем вернуть исходное значение. Я уже писал такой оператор раньше, но, как вы видите, это не то же самое:
let (>|) x f = f x; x
Если мы частично применим комбинатор K (со значением 5), мы возвращаем функцию, которая игнорирует свой аргумент и вместо этого возвращает 5. Опять же, не полезно.
(K 5) = fun y -> 5
Может ли кто-нибудь дать мне простой пример того, где это может быть использовано?