我正在寻找一种做无点风格分区的方法。点自由风格适用于大多数数学运算符,其中参数的顺序无关紧要,如乘法,减法或加法。
但问题在于我想要进行的划分div(x, y)
,但订单变为div(y, x)
。如下例所示:
let aList = [2;4;6;8]
let mut = aList |> List.map ((/)2)
部分应用的功能变为(fun x -> 2 / x)
。哪个会产生[1; 0; 0; 0]
,而我希望它是(fun x -> x / 2) -> [1; 2; 3; 4]
。
有没有简单的方法以点免费的方式做到这一点?
答案 0 :(得分:3)
添加交换运算符/函数:
let swap f = fun x y -> f y x
let aList = [2;4;6;8]
let mut = aList |> List.map (swap (/) 2)
答案 1 :(得分:3)
使用翻转运算符:
let aList = [2;4;6;8]
let (<.>) f a b = f b a
let mut = aList |> List.map ((/) <.> 2)
答案 2 :(得分:0)
我定义了MinusBy,DivBy,功能:
/// Minus, easy for pipe forward
let inline MinusBy y x = x - y
/// Division, easy for pipe forward
let inline DivBy y x = x / y
我如何在我的统计资料库中找到它有用:
// https://en.wikipedia.org/wiki/Normalization_(statistics)
let average = 2.0
let stdev = 3.0 // Standard Deviation
let Standardize (x:double) =
x |> MinusBy average |> DivBy stdev
我从我的问题中得到了其他用户的想法: