This question already has answers here:
Cartesian product of 2 lists in Haskell

(14 个回答)


8年前关闭。




我知道如何使用列表理解来做到这一点,但是如何实现一个函数来递归计算给定两组的笛卡尔积?

这就是我被卡住的地方(我是一个菜鸟)
crossProd :: [Int] -> [Int] -> [(Int,Int)]
crossProd xs ys | xs == [] || ys == [] = []
                | otherwise = (head xs, head ys) : crossProd (tail xs) (ys)

这个输出给了我



如果集合分别是 [1,2,3][4,5,6] ..
我将如何获得其余的?

最佳答案

最基本的情况是这样的:

{-crossProdAux :: Int -> [Int] -> [(Int,Int)]-}
crossProdAux x []    = []
crossProdAux x (a:b) = (x, a):(crossProdAux x b)

{-crossProd :: [Int] -> [Int] -> [(Int,Int)]-}
crossProd [] ys   = []
crossProd (a:b) ys= (crossProdAux a ys)++(crossProd b ys)

关于Haskell笛卡尔积递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14887973/

10-13 09:11