【问题标题】:What is the difference between these two domonad maybe-m statements?这两个 domonad maybe-m 语句有什么区别?
【发布时间】:2014-01-20 21:12:03
【问题描述】:

以下两个语句给出相同的结果:

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

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

我对 clojure 尤其是 monad 还是很陌生,但我只是想弄清楚这种情况下的区别。

谢谢

【问题讨论】:

    标签: clojure monads


    【解决方案1】:

    如果您查看 with-monad 的定义,您会发现它所做的只是从作为第一个参数给出的 monad 中提取有意义的函数。

    domonad 是一个“语法糖”,让您无需手动绑定和返回即可编写一元操作。它实际上在内部使用 with-monad 来使用 monad 有意义的函数来评估 expr。

    如果您只使用两个参数调用 domonad,就像您在第一个示例中所做的那样,它假定您已经处于 monad 的上下文中,这意味着所有有意义的函数都可用。在您的第一个示例中,它们确实可用,因为您在调用前使用 with-monad 使它们可用。 OTOH,如果您使用三个参数调用它,就像在第二个示例中一样,它首先使用 with-monad 引入 monad 的上下文,然后继续评估绑定。

    所以本质上,这两个样本完全一样。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2015-05-31
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多