我是一个Haskell新手。假设我有两个无限的数字列表A
和B
,我想创建另一个包含C
和{{1}序列的无限列表x+y
在x-y
和x <- A
的位置,即y <- B
在每个循环中增长2;什么是最聪明的方法呢?
答案 0 :(得分:6)
创建两个元素列表的无限列表并将它们连接起来。
concat [[x+y, x-y] | (x, y) <- zip listA listB]
答案 1 :(得分:4)
你可能不想要最聪明的方式,因为根据定义你调试它会太聪明了: - )
一种显而易见的方法是将无限流压缩在一起,如下所示:
zipWith k as bs
where
k a b = (a + b, a - b)
答案 2 :(得分:1)
对于无限列表,它只是
mkList (x:xs) (y:ys) = x+y : x-y : mkList xs ys
并且为了支持有限列表,你还要添加基本案例
mkList _ _ = []
答案 3 :(得分:0)
f xs = concat . zipWith go xs where
go x y = map (($y).($x)) [(+),(-)]