haskell中两个列表上的两个操作

时间:2012-05-02 17:20:22

标签: list haskell functional-programming

我是一个Haskell新手。假设我有两个无限的数字列表AB,我想创建另一个包含C和{{1}序列的无限列表x+yx-yx <- A的位置,即y <- B在每个循环中增长2;什么是最聪明的方法呢?

4 个答案:

答案 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)) [(+),(-)]