2014-01-20 76 views
0

以下兩個語句產生相同的結果:這兩個domonad maybe-m語句有什麼區別?

(with-monad maybe-m 
    (domonad [a nil 
      b (+ 1 a)] 
    b)) ;; nil 

(domonad maybe-m [a nil 
      b (+ 1 a)] 
    b) ;; nil 

我還是很新的Clojure,尤其是單子,但我只是試圖找出不同的是在這種情況下什麼。

感謝

回答

3

如果你看看with-monad的定義,你會發現它是所有提取有意義的功能給予了作爲第一個參數的單子。

domonad是「語法SUGER」讓你寫單子的操作,而無需手動綁定並返回。它實際上在內部使用monad來評估使用monads有意義函數的exprs。

如果調用domonad只有兩個參數,你在你的第一個例子,假設你已經在單子的情況下,這意味着所有的有意義的功能都可用。在第一個例子中,它們確實可用,因爲在調用之前通過使用with-monad使它們可用。 OTOH,如果你有三個參數來調用它,在你的第二個例子中,首先介紹了與-單子使用單子的情況下,再進行評估結合。

所以在本質上,這兩個樣品是完全一樣的。