已经提出并回答了几个类似的问题。可以找到实例,例如:
但是,我所发现的东西都没有完全回答我的问题。
在Haskell中,是否可能以及如何定义一个函数cartesianProduct
,它接受任意(有限)个列表不同类型并在鼻子上输出其笛卡尔积?
例如,在上面的链接中可以找到一个cartesianProd_2
,它优雅地吸收了两个不同类型的列表:
cartesianProd_2 :: [a] -> [b] -> [(a,b)]
cartesianProd_2 list_A list_B = [(x,y) | x<-list_A, y<-list_B]
对于某些固定的整数n,可以很容易地将其推广为cartesianProd_n
。>
但是,我希望可以定义一个可以做到的
我什至不知道cartesianProd (list_1,list_2) == (cartesianProd_2 list_1 list_2) cartesianProd (list_1,list_2,list_3) == (cartesianProd_3 list_1 list_2 list_3) -- and so on .. notice that list_i is a list of elements of type i.
我遇到的一个[[直接障碍]
cartesianProd
的type是什么!它的域是(不同类型的列表)的元组!那我该怎么办?非常感谢。编辑已经提出并回答了几个类似的问题。例如,可以找到实例:Haskell中2个列表的笛卡尔积在Haskell中列表列表上的笛卡尔积我如何...
zipWithN
可将N个不同类型的列表压缩在一起。您必须接受[[a]]
作为输入(要求所有输入为同一类型),或者专门处理特定的元组大小(cart2
,cart3
,cart4
等)。如果您好奇如何操作类型级数据结构来解决上述问题,请继续阅读。如果您要解决实际问题,请跳过所有这些废话,然后跳至In Reality