Cartesian product of infinite lists in Haskell

后端 未结 2 629
余生分开走
余生分开走 2020-12-02 02:13

I have a function for finite lists

> kart :: [a] -> [b] -> [(a,b)]
> kart xs ys = [(x,y) | x <- xs, y <- ys]

but how to i

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-02 02:37

    Prelude> let kart = (\xs ys -> [(x,y) | ls <- map (\x -> map (\y -> (x,y))  ys)  xs, (x,y) <- ls])
    Prelude> :t kart
    kart :: [t] -> [t1] -> [(t, t1)]
    Prelude> take 10 $ kart [0..] [1..]
    [(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(0,10)]
    Prelude> take 10 $ kart [0..] [5..10]
    [(0,5),(0,6),(0,7),(0,8),(0,9),(0,10),(1,5),(1,6),(1,7),(1,8)]
    

提交回复
热议问题