在 F# 中创建否定谓词

Creating a negated predicate in F#

例如,我在 F# 中有一个谓词

let myFunc x y = x < y

有没有办法创建这个函数的否定版本?

所以功能上类似于

let otherFunc x y = x >= y

但是通过使用原来的myFunc?

let otherFunc = !myFunc  // not valid 

F# 中的否定是通过函数 not 完成的。 ! 运算符用于取消引用 ref 个单元格。

let otherFunc x y = not (myFunc x y)

您正在尝试做的事情叫做 "function composition"。查看f#的函数组合操作符:

  • In F# what does the >> operator mean?

我没有可用于实验的编译器,但您可以从

开始
let otherFunc = myFunc >> not

并解决错误。

EDIT:Max Malook 指出这不适用于 myFunc 的当前定义,因为它需要两个参数(从某种意义上说,这是函数式的-土地)。因此,为了使这项工作正常进行,myFunc 需要更改为接受元组:

let myFunc (a, b) = a > b
let otherFunc = myFunc >> not
let what = otherFunc (3, 4)