Просто чтобы ответить на вопрос Чака и комментария Криса Смита, вы можете написать
let digits = string_of_int >> String.length
digits 9000;; // 4
[1; 10; 100] |> List.map digits;; // [1;2;3]
Когда вы объединяете эти операторы композиции и конвейера с функциями более высокого порядка, вы можете очень кратко делать сложные вещи:
let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
prodSqrtAbs [| -9.0; 4.0 |];; // 6.0
EDIT : Я только что прочитал о J и его неявном операторе разветвления. Это очень сильно. Вы можете создавать эквивалентные операторы высшего порядка в F #, но они не будут применяться неявно. Так, например, сначала определите lift
(используя явные аргументы)
let lift op a b x = op (a x) (b x)
и затем применить его явно
let avg = lift (/) List.sum List.length
чтобы получить что-то похожее на пример J на странице Википедии, на которую вы ссылались. Но это не совсем "молчаливый".