1

我有点像 Haskell 新手。假设我有两个无限的数字列表,A并且B我想创建另一个无限列表C,其中包含x+y's 和x-y's where x <- Aand的序列y <- B,即C在每个循环中增长 2;最聪明的方法是什么?

4

4 回答 4

7

制作一个无限的二元素列表并将它们连接起来。

concat [[x+y, x-y] | (x, y) <- zip listA listB]
于 2012-05-02T17:23:51.443 回答
4

您可能不想要最聪明的方法,因为根据定义它对您来说太聪明了无法调试:-)

一种明显的方法是将无限流压缩在一起,如下所示:

zipWith k as bs
    where
        k a b = (a + b, a - b)
于 2012-05-02T17:23:28.717 回答
1

仅适用于无限列表

mkList (x:xs) (y:ys) = x+y : x-y : mkList xs ys

并且为了支持有限列表,您必须添加基本情况

mkList _ _ = []
于 2012-05-03T14:56:31.023 回答
0
f xs = concat . zipWith go xs where 
       go x y = map (($y).($x)) [(+),(-)]
于 2012-05-03T08:41:50.820 回答