Haskell嵌套列表生成器

时间:2016-05-19 16:05:05

标签: haskell list-comprehension

这是我在List comprehension上一直在研究的问题。我知道它应该通过递归解决,但我不确定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)]]

1 个答案:

答案 0 :(得分:1)

好的,让我们一步一步让你到那里

也许你已经看过这个评论了,但是这里有最重要的一步,但是:

Copy Bundle Resources

注意两个列表构造函数对应的两个案例 - 这是典型的,你错过了第二个案例。

现在你只需要:

  • 填写 RewriteBase / RewriteRule ^tags/(.*)$ /tag/$1 [L,R=301] 应该很容易
  • 弄清楚如何修复订单(IMO会帮助你理解),这样你的例子就是这样的

我猜你得到了 - 以防万一,答案是:

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