【发布时间】:2017-09-08 16:17:56
【问题描述】:
我对 Haskell(以及一般的函数式编程)非常陌生,我正在尝试编写一个名为 “profileDistance m1 m2”,它将两个矩阵作为参数,需要计算每个矩阵中每个元素之间的差异之和......我可能没有很好地解释。让我来代替它。
矩阵形式为:[[(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 循环且无功能的语言中都很容易做到,但我不知道如何在 Haskell 中做到这一点。我有一种感觉,像 map、fold 或 sum 这样的函数会在这里帮助我(诚然,我不能 100% 确定 fold 的工作原理)。我希望有一个简单的方法可以做到这一点...请帮助。
【问题讨论】:
标签: loops haskell matrix iterator sum