跳轉到內容

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]

華夏公益教科書