J 中的术语“monadic”是不是与它的 Haskell 使用有关?
Posted
技术标签:
【中文标题】J 中的术语“monadic”是不是与它的 Haskell 使用有关?【英文标题】:Does the term "monadic" in J have anything to do with its Haskell use?J 中的术语“monadic”是否与它的 Haskell 使用有关? 【发布时间】:2012-02-07 02:47:37 【问题描述】:(对不起,我很愚蠢,没有受过教育,所以这可能是一个荒谬的问题。)
我刚开始研究 J,他们使用术语“一元”和“二元”来表示(对我而言)似乎是一元和二元运算符。为什么要这样做,它与我听说过的另一个地方(Haskell)有什么关系?我的猜测是它们是不相关的同音词,但我不确定。
【问题讨论】:
不是一个愚蠢的问题; “monad”用来表示的东西的数量非常令人惊讶:) I second ehird... 听起来独特的名字很多时候并不意味着同样的事情。看看“函子”有多少个定义。 【参考方案1】:它们是无关的,除了两者都源自希腊语词根“一”。一元和二元确实是一元和二元函数的术语。具体来说,它们是源自希腊语的等价物——使用 -adic 而不是 -ary。考虑一下“三合会”这个词,它也是源自希腊语。
在 Haskell 使用的意义上 Monad 有 an unclear etymology 但可能源自“monoid”。
不过,我鼓励在 Haskell 中坚持使用源自拉丁语的“n-ary”术语。由于柯里化,Haskell 中的所有函数在技术上都有一个参数,因此使用源自希腊语的形式可能会产生任意数量的混淆。
【讨论】:
嘿,我喜欢“任意数量的混乱”这个短语。【参考方案2】:它们不相关; C. A. McCann 指出了两者的词源。
无论如何,Haskell 的使用当然来自范畴论,并且被认为是与other senses of monad 无关的独立创造。
事实上,“monadic”的 J 意义可以追溯到 APL,它比 Haskell 早了四分之一个世纪!我认为它也可能早于该术语的范畴论使用。
【讨论】:
我猜你引用的 monad 的定义是“西方哲学传统”的一部分,并且特别被 leibniz en.wikipedia.org/wiki/Gottfried_Leibniz#The_monads 使用 你在说什么? Haskell 早于 Lisp,而 Lisp 早于 APL。事实上,Haskell 是在汇编程序发明两年后制造的。 @trinithis:您是否将 Haskell 与其他语言混淆了? Lisp 是在 1958 年指定的,APL 是在 1957 年到 1964 年之间开发的,但 Haskell 直到 1987 年才开始,Haskell 1.0 直到 1990 年才被定义。【参考方案3】:Adicity(或 adinity)是 arity 的替代方案,使用希腊数字根而不是拉丁语:
niladic/medadic = nullary
一元=一元
二元=二进制
三元=三元
四元=四元
…
monad 在哲学、宗教、生物学、范畴论和函数式编程中的各种含义都是从其对“单元”的字面含义分别衍生而来的。 Haskell 项可能源自 monoid,这是一种等效于加法单子的代数结构。
【讨论】:
【参考方案4】:不,J 的使用与 Haskell 术语无关。一元函数和二元函数分别是一个和两个参数的函数。
J 术语源自 APL,它比 Haskell 稍早一些,但我很少看到它们在 APL 家族之外被这样使用。
在非 APL 上下文中使用这些术语的一个示例来自书籍 Clean Code,该书在关于函数的章节中讨论了 niladic、monadic 和 dyadic 函数。
【讨论】:
另一个在 APL 特定文献之外使用一元和二元的例子可以在 Peter Landin (1966) 的 The Next 700 Programming Languages 中找到。请参阅第 8 节和附加的讨论。以上是关于J 中的术语“monadic”是不是与它的 Haskell 使用有关?的主要内容,如果未能解决你的问题,请参考以下文章