'sequence-maybe-m' (sequence モナドの振る舞いと Maybe モナドを組み合わせたモナド) を書くのに助けが必要です。
ルールは次のとおりです。
- 入力のいずれかが nil の場合、式全体が失敗します。
- それ以外の場合は、シーケンス モナドが行うように本体を評価します。
(ドモナド シーケンス-多分-m [a [1 2 3] b [1 2 3]] (+ ab)) ;; => (2 3 4 3 4 5 4 5 6) (domonad sequence-maybe-m [a [1 2 3] b nil] (+ ab)) ;; =>なし (domonad sequence-maybe-m [a [1 2 3] b (範囲 a)] (+ ab)) ;; => (1 2 3 3 4 5) 「for」と同じ (domonad sequence-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 <...>
])
<...> は関数です。