如何定義一個以有限串列 xs 作為引數并回傳 xs 的所有段的串列的函式 segments。(一段 xs 是 xs 的相鄰元素的選擇。)
例如,段 [1, 2, 3] = [[1, 2, 3], [1, 2], [2, 3], [1], [2], [3]]。
我知道如何寫一個 inits,但我怎么能擴展到這種情況!
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = [x:xs] segments (init (x:xs))
uj5u.com熱心網友回復:
如果您可以撰寫自己的inits_函式(我特別添加_到最后,因為inits它是標準函式,但行為有點不同),您可以segments通過呼叫inits_所有尾部來撰寫函式(我只是重寫了您的代碼segments并將其重命名為inits_):
inits_ :: [a] -> [[a]]
inits_ [] = []
inits_ xs = xs : inits_ (init xs)
segments :: [a] -> [[a]]
segments [] = []
segments (x:xs) = inits_ (x:xs) segments xs
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445994.html
標籤:哈斯克尔
下一篇:檢查二維陣列中的鄰居時出錯
