【发布时间】:2012-11-13 17:20:10
【问题描述】:
经过一年多的心理争论,我终于对 Haskell 有了足够的了解,可以将其视为满足我大多数一般编程需求的主要语言。我非常喜欢它。
但我仍然在努力以一种功能性的方式进行非常具体的操作。
一个简化的例子:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
我想将这些条目相互比较。对于像 C 或 Python 这样的语言,我可能会创建一些复杂的循环,但我不确定哪种方法(映射、折叠、列表理解?)对于函数式语言来说是最好的或最有效的。
这是我开始编写的代码示例:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
谓词阻止列表推导将条目与其自身进行比较,但该函数效率不高,因为它比较已经比较过的条目。例如。它会将 Bob 与 Megan 进行比较,然后将 Megan 与 Bob 进行比较。
任何有关如何解决此问题的建议将不胜感激。
【问题讨论】:
-
你说你想比较它们,但不是你想用比较的结果做什么。从您的示例中,您似乎想查看列表中两个不同元素的每一个选择。是这样吗?
-
是的,但不是“反向”选择。我想比较鲍勃和梅根,鲍勃和弗兰克,鲍勃和简,然后是梅根和弗兰克,梅根和简,然后是弗兰克和简(我认为这涵盖了所有组合)。这看起来可以用 fold 完成,但我不确定。
标签: performance haskell functional-programming dataset comparison