リストモナドの練習
揺動散逸日記 萌えるモナド講座その1を見ながら、「各桁の和の11倍と等しい三桁の整数」を実際に動かして求めてみました。answersでは、a、b、cの組合せの内から条件にマッチするもののみ返します。
module Main (main) where import Control.Monad (guard) answers :: [] Int answers = do a <- [1..9] b <- [0..9] c <- [0..9] let n = a * 100 + b * 10 + c guard $ n == (a + b + c) * 11 return n main :: IO () main = print answers -- => [198]
確かにモナドは萌えます。表面的にはひかえめなんだけど、いろいろ裏でよきようにはからってくれるあたりとか。
参照: