Подтвердить что ты не робот

В 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
4b9b3361

Ответ 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), что может быть более естественным в некоторых случаях.

Ответ 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