(对不起,我很愚蠢,没有受过教育,所以这可能是一个荒谬的问题。)
我刚开始看J,他们使用术语“monadic”和“dyadic”来表示(对我来说)是一元和二元运算符。为什么要这样做,它与我听到的那个地方(Haskell)有什么关系呢?我的猜测是他们是无关的同音异义词,但我不确定。
答案 0 :(得分:19)
它们是无关的,除非两者都来自希腊词根“一”。 Monadic和dyadic确实是一元和二元函数的术语。具体来说,它们是希腊语派生的等价物 - 使用 -adic 而不是 -ary 。考虑“三元组”这个词,它也是希腊语派生的。
Monad在某种意义上说Haskell使用它an unclear etymology但可能来自“monoid”。
但我鼓励在Haskell中坚持使用源自拉丁语的“n-ary”术语。由于currying,Haskell中的所有函数在技术上都有一个参数,因此使用希腊语派生的形式会产生任意数量的混淆。
答案 1 :(得分:13)
他们是无关的; C. A. McCann指出了两者的词源。
无论如何,Haskell的使用当然来自类别理论,被认为是与other senses of monad无关的独立创造。
事实上,J“monadic”的感觉可以追溯到APL,它在Haskell之前的四分之一世纪!我认为它也可能早于该术语的范畴理论用法。
答案 2 :(得分:11)
Adicity (或 adinity )是 arity 的替代品,使用希腊数字根而不是拉丁语:
niladic / medadic = nullary
monadic =一元
dyadic = binary
triadic = ternary
tetradic = quaternary
...
monad 在哲学,宗教,生物学,范畴论和函数式编程中的各种含义都是从“单位”的字面表示中分别得出的。 Haskell项可能来源于 monoid ,这是一个等价于加法monad的代数结构。
答案 3 :(得分:6)
不,J的使用与Haskell术语无关。 Monadic和dadadic函数分别是一个和两个参数的函数。
J术语源自APL,它比Haskell稍早,但我很少看到它们在APL家族之外使用过。
在非APL上下文中使用这些术语的一个例子来自书Clean Code,该书在关于函数的章节中讨论了niladic,monadic和dyadic函数。