Ocaml 减法算子的最干净部分应用

Ocaml 减法算子的最干净部分应用,ocaml,subtraction,partial-application,Ocaml,Subtraction,Partial Application,如果我想要一个从数字2减去int参数的函数,我可以这样做 let two_minus = (-) 2 let minus2 = flip (-) 2 但是如果我想要一个从int参数中减去2的函数呢 在哈斯克尔,我能做到 let two_minus = (-) 2 let minus2 = flip (-) 2 但在OCAML4.02中,flip不是标准库的一部分 现在,我已经决定了 let minus2 = (+) ~-2 将负2添加到int参数。我发现它看起来比我的干净 let mi

如果我想要一个从数字2减去int参数的函数,我可以这样做

let two_minus = (-) 2
let minus2 = flip (-) 2
但是如果我想要一个从int参数中减去2的函数呢

在哈斯克尔,我能做到

let two_minus = (-) 2
let minus2 = flip (-) 2
但在OCAML4.02中,flip不是标准库的一部分

现在,我已经决定了

let minus2 = (+) ~-2
将负2添加到int参数。我发现它看起来比我的干净

let minus2 = fun x -> x-2
。。。或者至少它需要更少的字符


有更好、更惯用的方法吗?

OCaml是一种编程语言。您可以自由定义任何您觉得方便的内容:

let flip f x y = f y x

OCaml是一种编程语言。您可以自由定义任何您觉得方便的内容:

let flip f x y = f y x

在Haskell中,您可以对操作符部分执行任何操作,这比flip imo更干净:

OCaml不支持afaik的这种精确性。但是,如果您喜欢flip,那么定义您自己的是很简单的:

let flip f x y = f y x;;
或者,您可以使用已经定义的标准库,如核心和电池。例如:

fwiw,在没有操作符部分的情况下,我发现有趣的x->x-2比您提出的两个备选方案都要清晰。它看起来可能不那么好,但它的意思马上就清楚了


与聪明简洁的表达式相比,更喜欢清晰明确的表达式,这是非常惯用的OCaml。

在Haskell中,您可以使用运算符部分执行任何操作,这比flip imo更简洁:

OCaml不支持afaik的这种精确性。但是,如果您喜欢flip,那么定义您自己的是很简单的:

let flip f x y = f y x;;
或者,您可以使用已经定义的标准库,如核心和电池。例如:

fwiw,在没有操作符部分的情况下,我发现有趣的x->x-2比您提出的两个备选方案都要清晰。它看起来可能不那么好,但它的意思马上就清楚了

与聪明简洁的表达式相比,喜欢清晰明确的表达式是非常惯用的OCaml。

let minus2 x=x-2非常简短。let minus2 x=x-2非常简短。