我需要帮助来编写“sequence-maybe-m”(一个结合了序列单子和可能单子的行为的单子)。
规则应该是:
- 如果任何输入为 nil,则整个表达式失败。
- 否则,像序列单子一样评估身体。
(domonad 序列-maybe-m [a [1 2 3] b [1 2 3]] (+ ab)) ;; => (2 3 4 3 4 5 4 5 6) (domonad 序列-maybe-m [a [1 2 3] b nil] (+ ab)) ;; => 无 (domonad 序列-maybe-m [a [1 2 3] b (范围 a)] (+ ab)) ;; => (1 2 3 3 4 5) 与“for”相同 (domonad 序列-maybe-m [a [1 2 3] b [1 nil 3]] (+ ab)) ;; => 无
如果它与 clojure.algo.monads 库兼容,那将是一个奖励:
(defmonad sequence-maybe-m
[m-result <...>
m-bind <...>
m-zero <...>
m-plus <...>
])
其中 <...> 是函数。