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