【发布时间】:2013-02-15 03:50:04
【问题描述】:
我知道如何使用列表推导来做到这一点,但是如何实现一个函数,在给定两个集合的情况下递归计算笛卡尔积?
这就是我被困的地方(我是菜鸟)
crossProd :: [Int] -> [Int] -> [(Int,Int)]
crossProd xs ys | xs == [] || ys == [] = []
| otherwise = (head xs, head ys) : crossProd (tail xs) (ys)
这个输出给了我
[(1,4),(1,5),(1,6)]
如果集合分别是[1,2,3] 和[4,5,6]..
剩下的我该怎么办?
【问题讨论】:
-
尝试写一个更简单的案例:crossProdAux :: Int -> [Int] -> [(Int,Int)]
-
这很自然地写成列表理解。