1

私はHaskellの初心者です。数の無限リストが2つAあり、 「s」と「s」のシーケンスを含むB別の無限リストを作成したいとします。ここで、とは、ループごとに2ずつ増加します。これを行うための最も賢い方法は何ですか?Cx+yx-yx <- Ay <- BC

4

4 に答える 4

7

2要素リストの無限リストを作成し、それらを連結します。

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 に答える