Clojure 这两个domonad-maybe-m语句之间有什么区别?
以下两条语句给出了相同的结果:Clojure 这两个domonad-maybe-m语句之间有什么区别?,clojure,monads,Clojure,Monads,以下两条语句给出了相同的结果: (with-monad maybe-m (domonad [a nil b (+ 1 a)] b)) ;; nil (domonad maybe-m [a nil b (+ 1 a)] b) ;; nil 我对clojure还是很陌生,尤其是monads,但我只是想弄清楚这件事的区别 谢谢如果你看一下的定义,你会发现它所做的只是从作为第一个参数给出的monad中提取有意义的函数 是一个“语法糖”,它允许
(with-monad maybe-m
(domonad [a nil
b (+ 1 a)]
b)) ;; nil
(domonad maybe-m [a nil
b (+ 1 a)]
b) ;; nil
我对clojure还是很陌生,尤其是monads,但我只是想弄清楚这件事的区别
谢谢如果你看一下的定义,你会发现它所做的只是从作为第一个参数给出的monad中提取有意义的函数 是一个“语法糖”,它允许您编写一元操作,而无需手动绑定和返回。它实际上在内部使用with monad来使用monads有意义的函数计算表达式 如果像在第一个示例中那样,只使用两个参数调用domonad,那么它假定您已经处于monad的上下文中,这意味着所有有意义的函数都可用。在第一个示例中,它们确实可用,因为您在调用之前通过与monad一起使用使它们可用。OTOH,如果您使用三个参数调用它,就像在第二个示例中一样,它首先使用with monad引入monad的上下文,然后继续计算绑定
所以本质上,这两个示例是完全相同的。如果你看一下的定义,你会发现它所做的只是从作为第一个参数给出的单子中提取有意义的函数 是一个“语法糖”,它允许您编写一元操作,而无需手动绑定和返回。它实际上在内部使用with monad来使用monads有意义的函数计算表达式 如果像在第一个示例中那样,只使用两个参数调用domonad,那么它假定您已经处于monad的上下文中,这意味着所有有意义的函数都可用。在第一个示例中,它们确实可用,因为您在调用之前通过与monad一起使用使它们可用。OTOH,如果您使用三个参数调用它,就像在第二个示例中一样,它首先使用with monad引入monad的上下文,然后继续计算绑定
所以本质上,这两个示例是完全相同的。如果你看一下的定义,你会发现它所做的只是从作为第一个参数给出的单子中提取有意义的函数 是一个“语法糖”,它允许您编写一元操作,而无需手动绑定和返回。它实际上在内部使用with monad来使用monads有意义的函数计算表达式 如果像在第一个示例中那样,只使用两个参数调用domonad,那么它假定您已经处于monad的上下文中,这意味着所有有意义的函数都可用。在第一个示例中,它们确实可用,因为您在调用之前通过与monad一起使用使它们可用。OTOH,如果您使用三个参数调用它,就像在第二个示例中一样,它首先使用with monad引入monad的上下文,然后继续计算绑定
所以本质上,这两个示例是完全相同的。如果你看一下的定义,你会发现它所做的只是从作为第一个参数给出的单子中提取有意义的函数 是一个“语法糖”,它允许您编写一元操作,而无需手动绑定和返回。它实际上在内部使用with monad来使用monads有意义的函数计算表达式 如果像在第一个示例中那样,只使用两个参数调用domonad,那么它假定您已经处于monad的上下文中,这意味着所有有意义的函数都可用。在第一个示例中,它们确实可用,因为您在调用之前通过与monad一起使用使它们可用。OTOH,如果您使用三个参数调用它,就像在第二个示例中一样,它首先使用with monad引入monad的上下文,然后继续计算绑定 所以本质上,这两个样本是完全相同的