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 使用有关?的主要内容,如果未能解决你的问题,请参考以下文章

Python中lambda的使用,与它的三个好基友介绍!

Scalaz(33)- Free :算式-Monadic Programming

Fiori缓存与它的清除

Monadic Function_Haskell笔记12

求序列完美度(trie+贪心)

wpf异常:某个ItemsControl与它的项源不一致