Только что начал изучать F # и сейчас читаю «The Book Of F #». Возможно, мне что-то не хватает, но насколько я знаю, операторы прямого и обратного конвейеров передают результат выражения в последний параметр следующей функции в прямом/обратном направлении. Но почему это работает? Он проходит y
до x
(обработка x как функция), затем передайте x y
в последний параметр, например. b
минус. Поэтому он должен вернуть закрытие не a. Но backwardTest 3 2
возвращает 1
.F # оператор обратного конвейера с несколькими параметрами
let backwardTest x y =
let minus a b = a - b
minus <| x <| y
Операторы, на самом деле, применить первый аргумент первого. Проверьте [этот вопрос] (http://stackoverflow.com/questions/11378402/partial-function-application-for-a-non-symmetric-operator-using-point-free-style), чтобы увидеть, как мы иногда пытаемся применить * не первый * один в случае асимметричных функций, таких как вычитание, деление или модуль. – bytebuster
Просто перепроверьте раздел о конвейерной обработке в книге, которую я читаю, и хотел бы, чтобы он упомянул об этом; в противном случае было бы естественно думать, что оператор обратного конвейера также передает аргументы справа налево. Спасибо за ссылку, которая проясняет ситуацию дальше! – stt106
Ключ должен перестать думать об этих операторах как о чем-то волшебном. Это обычные функции, как и все остальное. Вы даже можете определить свой собственный. На самом деле, это было бы полезным упражнением, чтобы понять, что происходит. –