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中缺少