Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 将两个元组与嵌套列表组合_Haskell_List Comprehension - Fatal编程技术网

Haskell 将两个元组与嵌套列表组合

Haskell 将两个元组与嵌套列表组合,haskell,list-comprehension,Haskell,List Comprehension,我有一个有趣的问题需要解决,涉及嵌套列表理解。我将为这篇文章编辑不必要的细节,因为我试图解决的问题可能看起来有点奇怪 我有两个元组,如下X,Y,Z和1,2。这些文件的内容将仅与上述内容相同 使用这两个列表,我需要构造一个包含3元组的列表,其中包含上述两个列表内容的每个组合。其中一个元组的示例是X2、Z2、Y1。注意数字总是在字母后面 我知道我需要使用列表理解来实现这一点,但似乎我需要某种嵌套的列表理解,我并不熟悉 我从这个开始: [comb1,comb2,comb2{-这里是什么?-}] 我不知

我有一个有趣的问题需要解决,涉及嵌套列表理解。我将为这篇文章编辑不必要的细节,因为我试图解决的问题可能看起来有点奇怪

我有两个元组,如下X,Y,Z和1,2。这些文件的内容将仅与上述内容相同

使用这两个列表,我需要构造一个包含3元组的列表,其中包含上述两个列表内容的每个组合。其中一个元组的示例是X2、Z2、Y1。注意数字总是在字母后面

我知道我需要使用列表理解来实现这一点,但似乎我需要某种嵌套的列表理解,我并不熟悉

我从这个开始:

[comb1,comb2,comb2{-这里是什么?-}]

我不知道如何进行。如何使用嵌套列表理解解决此问题?我相信嵌套列表理解是解决这个问题的最好方法,但是如果你知道更好的方法,请解释一下

编辑以下内容,了解更多详细信息:

此元组列表将由一个类似以下内容的函数输出:

init :: [(String, String, String)]
init = [(comb1, comb2, comb3) | {- What goes here? -}]
init函数的返回值将在需要执行此3元组列表上的任务的较大程序的上下文中使用。实际的两个元组X、Y、Z和1、2将硬编码到init函数的列表中


除了笛卡尔积给出的结果外,还有更多的组合。笛卡尔积将导致[[X1,Y1,Z1],[X2,Y2,Z2]]。但是,字母不必按顺序排列,有些字母可能根本不会出现在结果中。[Z1,X2,X1]也是一个有效的组合

它总是一个3元组和一个2元组吗?如果是这样,您不妨直接进行计算:

getInit (a,b,c) (x,y) =
  [ (a++x,b++x,c++y)
  , (a++y,b++y,c++y)
  ]
但是,如果可以使用列表,则有几种方法可以执行以下操作:


函数的实际输出应该是什么,以及它的类型?如果你知道你的输入总是相同的,为什么还要输入呢?在我看来,这可以简化为用替换列表中某个长度的所有置换,例如[1,2],然后用其他输入压缩每个置换。@user2407038我在帖子中添加了一些额外的信息。输入不是真正的输入,而是硬编码到init函数中。请解释下行投票?这很有帮助,但并不完全正确。除了笛卡尔积给出的结果外,还有更多的组合。笛卡尔积将导致[[A1,B1,C1],[A2,B2,C2]]。但是,字母不必按顺序排列,有些字母可能根本不会出现在结果中。[C1,B2,B1]也是一个有效的组合。@JavascriptLoser仅从六个列表中选择我不确定我是否理解你的意思,但使用你链接的问题中的代码,排列3[a,B,C,1,2]几乎可以满足我的需要。该函数生成的列表示例为[1,B,a]。我需要3对,其中一对是一个字母和一个数字。我不知道如何将您编写的代码与该问题中的代码结合起来;拾取::Int->[a]->[[a]];选择0=[[];拾取[]=[];pick nx:xs=map x:pick n-1xs++pick nxs;组合=liftM2++;init=选择3个$combos[A,B,C][1,2];嗯,我不知道怎么在这里换行。但重要的部分是init=pick 3$combos[A,B,C][1,2]。
[[x++y | x <- ["A","B","C"]] | y <- ["1","2"]]
import Control.Monad

combos = liftM2 (++)
init = combos ["A","B","C"] ["1","2"]