【问题标题】:Getting the opposite boolean output of anonymous functions [SML]获取匿名函数的相反布尔输出 [SML]
【发布时间】:2018-11-30 22:55:23
【问题描述】:

作为解决方案的一部分,我试图想办法将布尔匿名函数的值转换为相反的值。例如,我有函数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 的情况下完成它。有可能吗?

【问题讨论】:

    标签: sml


    【解决方案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
    

    【讨论】:

    • 在 SML 中,很容易离工作代码“只有一组括号”(即使您已经使用该语言编程了一段时间)。
    猜你喜欢
    • 2012-01-23
    • 2011-10-24
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多