经过一年多的思考,我终于理解了Haskell,足以将其视为我的主要语言,适用于大部分通用编程需求。我非常喜欢它。
但是,我仍然在努力以函数式的方式完成非常特定的操作。
以下是一个简化的例子:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
我希望能够比较这些条目。对于像C或Python这样的语言,我可能会创建一些复杂的循环,但我不确定在函数式编程中哪种方法(map、fold、列表推导?)最好或最有效。
下面是我开始工作的代码示例:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
谓词(predicate)使列表推导式不会将条目与自身进行比较,但是该函数并不十分高效,因为它会比较已经比较过的条目。例如,它会比较Bob和Megan,然后再比较Megan和Bob。
如果您对如何解决此问题有任何建议,将不胜感激。