私はHaskell(そして一般的なプログラミング)の新機能であり、パラメータとして2つの行列を取る "profileDistance m1 m2"という関数を記述しようとしています。各マトリックスの各要素間の差の合計を計算する必要があります...私はそれを非常によく説明していないかもしれません。代わりにそれを見せてください。Haskell - 各行列の各要素の差の和
行列がの形にあります。各行列は次のようなものに見えるかもしれません[[(Char,Int)]]
:
m1 = [[('A',1),('A',2)],
[('B',3),('B',4)],
[('C',5),('C',6)]]
m2 = [[('A',7),('A',8)],
[('B',9),('B',10)],
[('C',11),('C',12)]]
は(注:私はこの例では、順番に数字を書いたが、それらはいずれかの内の任意の番号をすることができ。。
result = ((snd m1['A'][0])-(snd m2['A'][0]))+((snd m1['A'][1])-(snd m2['A'][1]))+((snd m1['B'][0])-(snd m2['B'][0]))+((snd m1['B'][1])-(snd m2['B'][1]))+((snd m1['C'][0])-(snd m2['C'][0]))+((snd m1['C'][1])-(snd m2['C'][1]))
:順序の例に示すように、各行列の各行における文字しかし一致する)
結果()上記の場合には(擬似コード)のようになります
これは、for-loopsを持っていて機能しないどの言語でも簡単に実行できますが、Haskellでこれを行う方法はわかりません。 map
、fold
またはsum
のような機能が私をここで助けてくれると感じています(確かに、fold
がどのように動作するかは100%確信していません)。私はこれを行う簡単な方法があることを願っています...助けてください。ここで
ありがとう!素晴らしい仕事をした。 – Schytheron
@Schytheron:行列だけでなく、その和だけでなく、相違が必要な場合は、構造体を 'concat'で平坦化するのではなく、' zipWith(zipWith diffSnd) 'のようなものを使うこともできます。また、 '' Data.Function'から 'on'を使って' 'diffSnd =( - )' on' snd''を実行します。 –