В F #, что означает оператор?
Я заметил в этом коде образец, содержащий оператор → :
let printTree =
tree >> Seq.iter (Seq.fold (+) "" >> printfn "%s")
Что означает оператор/оператор? →
Большое спасибо, теперь он намного яснее.
Вот мой пример, который я создал, чтобы получить его:
open System
open System.IO
let read_lines path = File.ReadAllLines(path) |> Array.to_list
let trim line = (string line).Trim()
let to_upper line = (string line).ToUpper()
let new_list = [ for line in read_lines "myText.txt" -> line |> (trim >> to_upper) ]
printf "%A" new_list
Ответы
Ответ 1
Это оператор композиции функций.
Дополнительная информация о блог-страница Chris Smith.
Представление функциональной композиции оператор ( → ):
let inline (>>) f g x = g(f x)
Что читается как: заданы две функции: f и g, а значение x вычисляет результат f из x и передать этот результат до g. Интересная вещь здесь что вы можете выполнить функцию ( → ) и только проходят в параметрах f и g, результат - это функция, которая принимает один параметр и создает результат g (f (x)).
Вот краткий пример составления функция из меньших:
let negate x = x * -1
let square x = x * x
let print x = printfn "The number is: %d" x
let square_negate_then_print = square >> negate >> print
asserdo square_negate_then_print 2
При выполнении отпечатков '-4.
Ответ 2
Оператор >>
состоит из двух функций, поэтому x |> (g >> f) = x |> g |> f = f (g x)
. Там также есть другой оператор <<
, который состоит из другого направления, так что (f << g) x = f (g x)
, что может быть более естественным в некоторых случаях.
Ответ 3
В соответствии с F # Symbol and Operator Reference это оператор функции форвардной функции.
Ответ 4
Это функциональная композиция, используемая для частичное приложение
Ответ 5
Операторы композиции <<
и >>
используются для объединения двух функций, так что результат одного становится входом другого. Поскольку функции также являются значениями, если не указано иное, они рассматриваются как таковые, так что следующие выражения эквивалентны:
f1 f2 f3 ... fn x = (..((f1 f2) f3) ... fn) x
В частности, f2, f3, ...fn
и x
рассматриваются как значения и не оцениваются до их передачи в качестве параметров для их предыдущих функций. Иногда это то, что вы хотите, но в других случаях вы хотите указать, что result
одной функции является входом другого. Это можно реализовать с помощью операторов композиции <<
и >>
, таким образом:
(f1 << f2 << f3 ... << fn) x = f1(f2(f3 ... (fn x )..)
Аналогично
(fn >> ... f3 >> f2 >> f1) x = f1(f2(f3 ... (fn x )..)
Поскольку оператор композиции возвращает функцию, явный параметр x
не требуется в отличие от операторов труб x |> fn ... |> f1
или f1 <| ... fn <| x