Haskell/理解單子/解決方案/列表
外觀
1.
Prelude> ["bunny", "rabbit"] >>= generation
["bunny","bunny","bunny","rabbit","rabbit","rabbit"]
每個元素都會產生三個自己的副本。副本的順序與原始元素的順序相同。
2.
themselvesTimes :: [Int] -> [Int]
themselvesTimes ns = ns >>= \n -> replicate n n
1.
(<*>) 用於列表,它接受一個函式列表和一個可以傳遞給這些函式的值列表。然後,它將每個函式應用於所有值,並將所有生成的結果放在單個列表中返回。
2.
fs <*> xs = [ f x | f <- fs, x <- xs ]
請注意,在編寫上面的列表推導式時,生成器的順序很重要。為了看到區別,請在 GHCi 中嘗試 (\fs xs -> [ f x | f <- fs, x <- xs ]) [(2*),(3*)] [1,2] 和 (\fs xs -> [ f x | x <- xs, f <- fs ]) [(2*),(3*)] [1,2]。