为什么 "complement" 用作 ramda.js 中函数的名称

Why was "complement" used as a name for the function in ramda.js

我了解 ramda 的 complement 函数的用法,它反转谓词的 return。我无法理解的是为什么 "complement" 被用作名称。

const invertPredicate = R.complement(R.identity)
invertPredicate(false) //true

有人可以对此提供一些见解吗?

“在集合论中,集合A的补集指的是不在A中的元素”

https://en.m.wikipedia.org/wiki/Complement_(set_theory)

因此 R.complement 将为所有不满足提供的谓词的值生成谓词。

添加到 Scott Christopher 的回答中,Ramda(免责声明:Scott Christopher 和我都是 Ramda 作者)已经对这些基本功能进行了多次迭代。在某一时刻,我们有 andornot 用于值,以及 andFnorFnnotFn 用于函数。我们摆脱了值的名称,并使用更好的名称来组合谓词函数。

但那些超值版本很受欢迎。我们把它们带回来了。我们还给了他们更简单的名字,因为这是人们阅读中缀运算符 ||&& 以及前缀 ! 的方式。将其他名称命名为 botheither 很容易,但我们在找到 complement 之前遇到了一些困难。一旦我们找到那个,我们很高兴再次重命名。这个名字的实际解释正如斯科特克里斯托弗所说的那样。我仍然有些遗憾,但这是图书馆的正确决定。