Haskell中两个列表的所有配对,没有列表理解

smi*_*dha 1 haskell functional-programming list

我正在阅读Bird和Wadler在函数式编程中的好书并尝试解决Haskell中的练习.

上列出了一章有一节它说,任何列表理解可以在以下方面来实现map,filter并且concat和其中一个可能需要为附属功能map

我无法根据这些构建块实现以下表达式.

[(x,y) | x<- xs, y<- ys]
Run Code Online (Sandbox Code Playgroud)

如何使用地图和过滤器?

我做得很好

concat [ map (\ a -> (a,x)) ys | x<-xs ]

我怀疑我们必须在这里巧妙地使用currying,但我似乎无法弄明白.

Car*_*ten 6

以及每个x你需要的所有人y:

\x -> map (\y -> (x,y)) ys
Run Code Online (Sandbox Code Playgroud)

现在你只需要将它映射到所有 xs

cross xs ys = map (\x -> map (\y -> (x,y)) ys) xs
Run Code Online (Sandbox Code Playgroud)

例:

> cross [1..3] "AB"
[[(1,'A'),(1,'B')],[(2,'A'),(2,'B')],[(3,'A'),(3,'B')]]
Run Code Online (Sandbox Code Playgroud)