有没有办法在SML/NJ中获得二元运算符的Curried形式?

And*_*ton 3 operators sml smlnj currying

例如,而不是

- op =;
val it = fn : ''a * ''a -> bool
Run Code Online (Sandbox Code Playgroud)

我宁愿拥有

- op =;
val it = fn : ''a -> ''a -> bool
Run Code Online (Sandbox Code Playgroud)

用于

val x = getX()
val l = getList()
val l' = if List.exists ((op =) x) l then l else x::l
Run Code Online (Sandbox Code Playgroud)

显然,我可以自己做这件事,例如,

val l' = if List.exists (fn y => x = y) l then l else x::l
Run Code Online (Sandbox Code Playgroud)

但我想确保我不会错过更优雅的方式.

new*_*cct 5

您可以编写一个函数来帮助函数:

fun curry f x y = f (x, y)
Run Code Online (Sandbox Code Playgroud)

然后你可以做类似的事情

val curried_equals = curry (op =)
val l' = if List.exists (curried_equals x) l then l else x::l
Run Code Online (Sandbox Code Playgroud)