我希望在 Haskell 中生成 2 个列表的笛卡尔积,但我不知道该怎么做。笛卡尔积给出列表元素的所有组合:
xs = [1,2,3] ys = [4,5,6] cartProd :: [a] -> [b] -> [(a,b)] cartProd xs ys ==> [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
这不是一个实际的家庭作业问题,与任何此类问题无关,但解决此问题的方式可能会对我遇到的问题有所帮助。
使用列表推导式这非常容易。获取列表的笛卡尔积xs and ys,我们只需要获取元组(x,y)对于每个元素x in xs和每个元素y in ys.
xs
ys
(x,y)
x
y
这给了我们以下列表理解:
cartProd xs ys = [(x,y) | x <- xs, y <- ys]