bri*_*gge 4 f# functional-programming tacit-programming
默认或无点样式编程允许人们创建函数而不考虑其参数.这可以在F#中完成吗?
只要按照Chuck的回答和Chris Smiths的评论,你就可以写
let digits = string_of_int >> String.length
digits 9000;; // 4
[1; 10; 100] |> List.map digits;; // [1;2;3]
Run Code Online (Sandbox Code Playgroud)
当您将这些组合和管道运算符与高阶函数组合在一起时,您可以非常简洁地执行复杂的操作:
let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
prodSqrtAbs [| -9.0; 4.0 |];; // 6.0
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚阅读了J及其隐式fork运算符.这非常强大.您可以在F#中构建等效的高阶运算符,但不会隐式应用它们.所以,例如,首先定义lift(使用显式参数)
let lift op a b x = op (a x) (b x)
Run Code Online (Sandbox Code Playgroud)
然后明确地应用它
let avg = lift (/) List.sum List.length
Run Code Online (Sandbox Code Playgroud)
在您链接到的Wikipedia页面上获得类似于J示例的内容.但它不是"默契".