我想要一个函数,它接受任何类型的两个列表并返回一个(即f:: [[a]] -> [[a]] -> [[a]]).基本上,也产生两个输入列表的"串联".
例如
> f [[1,2,3], [123]] [[4,5,6], [3,7]]
[[1,2,3,4,5,6], [1,2,3,3,7], [123,4,5,6], [123,3,7]]
Run Code Online (Sandbox Code Playgroud)
我目前已经做到了这一点:
f _ [] = []
f [] _ = []
f (xs:xss) (ys:yss) = ((xs ++ ys) : [m | m <- f [xs] yss])
Run Code Online (Sandbox Code Playgroud)
但这没有考虑到xss并且是错误的.有什么建议?
它是一个笛卡尔积,所以你可以简单地使用一个列表理解来完成所有事情.
Prelude> let xs = [[1,2,3], [123]]
Prelude> let ys = [[4,5,6], [3,7]]
Prelude> [x ++ y | x <- xs, y <- ys]
[[1,2,3,4,5,6],[1,2,3,3,7],[123,4,5,6],[123,3,7]]
Run Code Online (Sandbox Code Playgroud)