如果我想要一个从数字2中减去int
自变量的函数,我可以这样做
let two_minus = (-) 2
但是,如果我想要一个从int参数中减去2 的函数怎么办?
在Haskell,我可以做
let minus2 = flip (-) 2
但是在Ocaml 4.02中,flip
不是标准库的一部分。
目前,我已经解决
let minus2 = (+) ~-2
,它为int
参数添加负2。我发现它看起来比
let minus2 = fun x -> x-2
...或者至少需要较少的字符。
有没有更好,更惯用的方式?
答案 0 :(得分:3)
在Haskell中,您可以使用运算符部分来完成所需的操作,这比flip
imo更为简洁:
Prelude> :t (2 -)
(2 -) :: Num a => a -> a
Prelude> :t ((-) 2)
((-) 2) :: Num a => a -> a
OCaml不支持此功能(afaik)。但是,如果您喜欢flip
,则定义自己的内容很简单:
let flip f x y = f y x;;
或者您可以使用已经定义好的标准库,例如Core
和Batteries
。例如,
# open Core
utop # Fn.flip;;
- : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c = <fun>
首先,在没有运算符部分的情况下,我发现fun x -> x-2
比您提出的两种选择中的任何一种都更清楚。它可能看起来不太好,但是可以立即看出它的含义。
在聪明和简洁的表达式上偏爱清晰和非常的表达式是非常习惯的OCaml。
答案 1 :(得分:1)
OCaml是一种编程语言。您可以随意定义任何您认为方便的内容:
let flip f x y = f y x