bonotakeの日記

元・ソフトウェア工学系研究者、今・AI系エンジニア

リストモナドの非決定性

ってこういうやつの事?

nonDet :: [Int] -> [Int] -> [Int]
nonDet [] _ = []
nonDet _ [] = []
nonDet xs ys = [(x + y)| x <- xs, y <- ys]

モナド風味で書くと

nonDet2 :: [Int] -> [Int] -> [Int]
nonDet2 [] _ = []
nonDet2 _ [] = []
nonDet2 xs ys = do
	x <- xs
	y <- ys
	return (x + y)

実行すると

Main> nonDet [1..3] [1..4]
[2,3,4,5,3,4,5,6,4,5,6,7]

みたいな。
んー…

てか、

Haskellのコード久々に書いた、俺w

注:bonotakeは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。