Haskell 列表的所有元素*列表

Haskell 列表的所有元素*列表,haskell,Haskell,我正在尝试用两个元组列表制作一个元组列表,如下所示: ["a", "b", "c"] ["a", "b", "c"] 为此: [("a", "a"), ("a", "b"),("a", "c")], [("b", "a"), ("b", "b"), ("b", "c"), ("c", "a"), ("c", "b"), ("a", "c")] 所以我正在尝试,但我不知道如何才能做到: f [] [] = [[]] f (x:xs) y = zip (repeat x) y:

我正在尝试用两个元组列表制作一个元组列表,如下所示:

["a", "b", "c"] ["a", "b", "c"]
为此:

[("a", "a"), ("a", "b"),("a", "c")], [("b", "a"), ("b", "b"), ("b", "c"), ("c", "a"), ("c", "b"), ("a", "c")]
所以我正在尝试,但我不知道如何才能做到:

f [] [] = [[]]
f (x:xs) y =
         zip (repeat x) y: f xs y

对于显式递归,很难击败:

f :: [a] -> [a] -> [[(a, a)]]
f [] _       = []
f _ []       = []
f (x:xs) yss = go x yss : f xs yss
  where
  go _ []     = []
  go x (y:ys) = (x, y): go x ys
然而,没有理由这样做。这就是列表理解的用例

f xs ys = [[(x, y) | y <- ys] | x <- xs]

f xs ys=[[(x,y)| y为什么
[[(字符串,字符串)]
而不是
[(字符串,字符串)]
?您似乎只分别处理
(“a”,…)
元组;
(“b”,…)
(“c”,…)
元组在同一个列表中。如果您只需要一个列表,请使用列表的
Applicative
实例:
fxs-ys=(,)xs-ys
。您的
f
几乎是正确的,只需将
f[].[]
用作基本情况(假设您实际上正在尝试创建元组列表而不是元组列表)
f=liftA2(,)
[(x,y)| y中缺少