在F#中创建一个否定谓词

3

我有一个F#中的谓词示例

let myFunc x y = x < y

有没有办法创建这个函数的否定版本?
因此,与以下内容在功能上类似的东西:
let otherFunc x y = x >= y

但是通过使用原始的myFunc函数呢?

let otherFunc = !myFunc  // not valid 
2个回答

10

你正在尝试的是所谓的“函数组合”。查看F#中的函数组合运算符:

我没有可用于实验的编译器,但您可以从以下内容开始。

let otherFunc = myFunc >> not

并且逐步解决错误。

编辑:Max Malook 指出,这将无法使用当前定义的 myFunc 工作,因为它需要两个参数(在某种意义上,这是函数领域)。 因此,为了使其工作, myFunc 需要改为接受一个元组:

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

只有在提供第一个参数时才能正常工作。 让其他函数 x = myFunc x >> not - Max Malook
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Vandroiy
为了完整性,或许也是为了一些乐趣(即使不是清晰度),你也可以编写not << myFunc来困扰你的同事们。 - gypsydave5

3

F# 中的否定(Negation)使用函数not。而!操作符用于取消引用ref单元格。

let otherFunc x y = not (myFunc x y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接