簡體   English   中英

Haskell列表清單

[英]Haskell list of lists

說我在haskell [2,4,6,8,9,4]中有一個列表,我想從第一個元素開始,然后跳過一兩個元素並得到所有可能的組合。所以我應該得到一個列表列表 所以對於上面的列表,我想返回以下列表[[2,6,9],[2,6,4],[2,8,4]]。 到目前為止我寫了這個

paths :: [int] -> [int]
paths [] = []
paths [x]=[x]
paths (x:z:xs) = x:paths(xs)

但它只返回一個列表,從第一個元素開始,然后逐個跳轉。 所以我不知道如何讓它遞歸,以便它跳過兩個和一個所有可能的跳躍。

非常感謝幫助。

你想要跳過一個或兩個元素。 因此,您不僅需要一個,而且需要兩個遞歸調用(如果您想通過遞歸策略解決此問題)。

但首先,讓我們修復你的類型:

paths :: [a] -> [[a]]

此外,我將更改基本情況:如果輸入為空,結果不是空列表,而是包含空列表的列表,因為空集上只有一個組合,這是再次空集。 此外,對於單身人士,我們將返回一個打包的單例列表:

paths []  = [[]]
paths [x] = [[x]]

現在如果我們有更多元素怎么辦? 我們記得第一個,跳過一兩個,然后在其余部分再次應用paths 但是,如果實際上有什么可以跳過,我們只會跳兩次。 之后,我們將第一個元素放回到前面:

paths (x:xs)
 | null jump1 = [[x]]
 | otherwise  = map (x:) $ paths jump1 ++ paths jump2
 where jump1 = drop 1 xs
       jump2 = drop 2 xs

例:

\> paths [2,4,6,8,9,4]
[[2,6,9],[2,6,4],[2,8,4],[2,8]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM