获取匿名函数的相反布尔输出[SML]

时间:2018-11-30 12:00:00

标签: sml

作为解决方案的一部分,我试图找到一种方法来将布尔匿名函数的值转换为相反的值。例如,我具有函数f,如下所示:fn x => x > 8。我想要像not这样的运算符,它将把输出转换为相反的值,因此匿名者将实际计算fn x => x <= 8。如下所示:

fun foo f x = not f x;

但是它不起作用,因为not仅适用于布尔值。我知道我可以做到以下几点:

fun foo f x = if f x then false else true;

但是,我想以某种方式在没有任何ifs的情况下做到这一点。有可能吗?

1 个答案:

答案 0 :(得分:1)

已经有not可以由谓词组成,例如喜欢:

val isntSpace = not o Char.isSpace

在OCaml的Base library中,有一个函数Fn.non执行此操作:

fun non f x = not (f x)

看来您只不过是括号而已。

这可以让您写:

val isntSpace = non Char.isSpace