Есть ли способ написать это в F #? - PullRequest
6 голосов
/ 20 октября 2010
let is_sum_greater_than_10 list =
    list
    |> Seq.filter (filter)
    |> Seq.sum
    |> (10 >)

Это не компилируется. Посмотрите на последнюю строку "|> (10>)", есть ли способ написать это так, чтобы левый был конвейер направлен для бинарных операторов?

Спасибо

Ответы [ 2 ]

7 голосов
/ 20 октября 2010

Вы можете использовать частичное применение оператора <, используя синтаксис (символ оператора) *1003*:

let is_sum_greater_than_10 list =
    list
    |> Seq.filter filter
    |> Seq.sum
    |> (<)10

Вы также можете увидеть это как эквивалент лямбда-приложения:

let is_sum_greater_than_10 list =
    list
    |> Seq.filter filter
    |> Seq.sum
    |> (fun x y -> x < y)10

или просто лямбда:

let is_sum_greater_than_10 list =
    list
    |> Seq.filter filter
    |> Seq.sum
    |> (fun y -> 10 < y)
0 голосов
/ 20 мая 2018

Вы можете использовать слегка модифицированную версию вашего примера, хотя это записано в инфиксном выражении:

let ``is sum greater than 10`` filter list =
    (list
        |> Seq.filter filter
        |> Seq.sum) > 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...