2012-01-10 126 views
16

(對不起,我是愚蠢的和沒有受過教育,所以這可能是一個可笑的問題。)J中的術語「monadic」與Haskell的用法有什麼關係?

我剛開始看J和他們所使用的術語「一元」和「二元」什麼似乎(我)是一元和二元運算符。爲什麼這樣做,它與我聽說過的這個術語(Haskell)的其他地方有什麼關係?我的猜測是他們是不相關的同音異義詞,但我不確定。

+8

不是一個愚蠢的問題; 「monad」這個詞的意思是很令人驚訝的:) – ehird 2012-01-10 17:25:42

+3

我第二個ehird ......很多次獨特的冠冕堂皇的名字並不意味着同樣的東西。只要看看'函子'有多少個定義。 – 2012-01-10 17:26:50

回答

13

它們不相關; C. A. McCann指出了兩者的詞源。

在任何情況下,Haskell的使用當然都來自類別理論,並被認爲是與other senses of monad無關的獨立創意。

事實上,J的「monadic」意義可以追溯到APL,它比Haskell早了四分之一個世紀!我認爲它也可能早於該術語的類別理論用法。

+1

我想你引用的* monad *的定義是「西方哲學傳統」的一部分,特別是萊布尼茨使用http://en.wikipedia.org/wiki/Gottfried_Leibniz#The_monads – jberryman 2012-01-10 19:01:29

+0

你在說什麼? Haskell早於Lisp,而Lisp早於APL。實際上,Haskell在組裝者發明僅兩年之後才製成。 – 2012-01-10 21:28:29

+6

@trinithis:你可能把Haskell和其他語言混淆了嗎? Lisp是在1958年指定的,APL是在1957年到1964年之間開發的,但Haskell直到1987年纔開始,並且Haskell 1.0直到1990年才被定義。 – 2012-01-11 02:18:20

6

不,J使用與Haskell術語無關。一元和二元函數分別是一個和兩個參數的函數。

J條款源於APL,它比Haskell稍舊,但我很少看到它們在APL系列之外使用。在非APL背景下使用這些術語的

一個例子是從書Clean Code,其中約約譯註,一元二元和功能函數會談節。

+2

另一個在APL特定文獻之外使用的一元和二元的例子可以找到在_下一個700編程語言_ Peter Landin(1966)。參見第8節和附加的討論。 – kaleidic 2012-01-16 15:47:36

19

除了兩者都來源於希臘語「one」之外,它們無關。一元和二元是一元和二元函數的名詞。具體來說,它們是希臘語的等價物 - 使用-adic而不是-ary。考慮一下「黑社會」這個詞,它也是希臘派生的。

Monad在Haskell使用它的意義上有an unclear etymology,但可能來自「monoid」。儘管如此,我會鼓勵用拉丁派生的「n-ary」術語堅持使用Haskell。 Haskell的所有功能在技術上都有一個因爲柯里化的論點,所以使用希臘派生的形式可能會產生任意數量的混淆。

+3

呵呵,我喜歡「任意數量的混亂」一詞。 – 2012-01-10 20:27:55

11

Adicity(或adinity)是使用希臘數字根代替拉丁文到arity替代,:

  • 譯註/ medadic =無參

  • 單子=一元

  • dyadic = binary

  • 三元=三元

  • tetradic =季

  • ...

在哲學,宗教學,生物學,分類理論單子的不同含義,和函數式編程是所有這些都是從它的「單位」的字面意義中單獨導出的。 Haskell項可能源自monoid,這是一個代數結構,相當於一個加法單子。

相關問題