2012-01-24 7 views
1

私のzip関数(下記参照)を使用して、2つのリスト[x0; x1; ...; xn]および[y0; y1; ...; ym]を返し、リスト[x0 + y0; x1 + y1; ...; xp + yp]であり、p = min(n; m)である。これはコンソールからの出力です。埋め込みメソッドを使用せずにhaskellでリストを追加する機能を作成する

*Recursion> :t addpairs 
addpairs :: (Num a) => [a] -> [a] -> [a] 
*Recursion> addpairs [1,2,3,4] [40,50,60,90] 
[41,52,63,94] 

私のzip機能:

zip [] _ = [] 
zip _ [] = [] 
zip (a:aa) (b:bb) = (a,b) : Recursion.zip aa bb 

すべてのヘルプは素晴らしいことです。助けたことすべてについて

addpairs xs ys = map f (Recursion.zip xs ys) 
    where f (x,y) = x + y 

ありがとう:

私は実際にこの問題 を解決これは私が思い付いたソリューションでした。あなたの関数が指定された二つのリストです

答えて

2

xsys場合は、その後、zip xs ys追加する数字のタプルのリストになります。

GHCi> zip [1,2,3,4] [40,50,60,90] 
[(1,40),(2,50),(3,60),(4,90)] 

zip xs ysいくつかの数値型a用タイプ[(a,a)]を持つことになります。次に、mapの種類を見てみましょう:fが機能追加される(a, a)を取り、その結果aを返すべきである

addpairs xs ys = map f (zip xs ys) 
    where f ... 

map :: (a -> b) -> [a] -> [b] 

あなたの機能は、次のようになります。それはあなたが残りを埋めるのを助けるはずです。

+0

だから私は本当にハズケルに新しいです、そして、私はまだすべてがどのように動作するのか把握しようとしています。関数をまとめる実際の構文は今私にとっては少し難しいです。基本的に私はその意味を理解していません。 – thehobbit21

+0

私は、結果として得られる 'addpairs'定義の構造が何であるべきかを示すのを助けるために私の答えを広げました。 – ehird

+0

私はまだ問題があります: addpairs xs ys = f(Recursion.zip xs ys) ここでf(x:xs)(y:ys)= fxy:addpairs f xs ys – thehobbit21

3

ほとんどの場合、解答はあなたのzip関数に書き留めておいてください。 しかし、2つの関連する値aとbを追加する代わりに、それらからタプルを作成します。

なぜ、追加したいのですか?

+0

私はあなたの質問を理解していません。 – thehobbit21

+0

本当ですか?もう一度考えて。あなたは 'as'と' bs'の2つのリストを持ち、結果として対応する要素が追加されたリストを望みますか?だから、 '(a、b):Recursion.zip as bs'の代わりに' a + b:Recursion.zip as bs'を書いたのなら、何が結果になるか自問自答してください。 – Ingo

関連する問題