簡體   English   中英

Haskell嵌套列表生成器

[英]Haskell Nested List Generators

我一直在研究列表理解這個問題。 我知道應該通過遞歸來解決,但是我不確定Haskell語法在遞歸情況下如何工作。

這是問題所在:

給定一個字符串列表,輸出這些字符串和3個變量[C,U,I]的所有可能組合。 例如,

 list ["vC", "vU", "vI"] == [[("vC",C),("vU",C),("vI",C)],[("vC",I),("vU",C),("vI",C)],[("vC",U),("vU",C),("vI",C)] ,[("vC",C),("vU",I),("vI",C)],[("vC",I),("vU",I),("vI",C)],[("vC",U),("vU",I),("vI",C)] ,[("vC",C),("vU",U),("vI",C)],[("vC",I),("vU",U),("vI",C)],[("vC",U),("vU",U),("vI",C)] ,[("vC",C),("vU",C),("vI",I)],[("vC",I),("vU",C),("vI",I)],[("vC",U),("vU",C),("vI",I)] ,[("vC",C),("vU",I),("vI",I)],[("vC",I),("vU",I),("vI",I)],[("vC",U),("vU",I),("vI",I)] ,[("vC",C),("vU",U),("vI",I)],[("vC",I),("vU",U),("vI",I)],[("vC",U),("vU",U),("vI",I)] ,[("vC",C),("vU",C),("vI",U)],[("vC",I),("vU",C),("vI",U)],[("vC",U),("vU",C),("vI",U)] ,[("vC",C),("vU",I),("vI",U)],[("vC",I),("vU",I),("vI",U)],[("vC",U),("vU",I),("vI",U)] ,[("vC",C),("vU",U),("vI",U)],[("vC",I),("vU",U),("vI",U)],[("vC",U),("vU",U),("vI",U)]] 

編輯:所以這是我到目前為止嘗試過的。

list :: [String] -> [Dict]
list [] = [[]]
list xs = [[(x,y)] | y<-[C,U,I], x <- xs]

但是,當我運行帶有三個變量的測試用例時,它僅輸出:

[[("vC",C)],[("vU",C)],[("vI",C)],[("vC",U)],[("vU",U)],[("vI",U)],[("vC",I)],[("vU",I)],[("vI",I)]]

好吧,讓我們一步一步地到達那里

也許您已經看過評論,但這是最重要的步驟,但是在:

list []     = [[]]
list (x:xs) = [(x,c) : ys | c <- ???, ys <- list xs ]

請注意與兩個列表構造函數相對應的兩種情況-這很典型,您錯過了第二種情況。

現在您只需要:

  • 填寫??? 應該很容易
  • 弄清楚如何解決訂單(IMO將幫助您理解),以便准確地執行您的示例

我想你明白了,以防萬一,答案是:

list []     = [[]]
list (x:xs) = [(x,c) : ys | ys <- list xs, c <- [C,I,U] ]

暫無
暫無

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

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