sub*_*ray 6 comparison performance haskell functional-programming dataset
经过一年多的精神争吵,我终于明白了Haskell,认为它是我的大部分编程需求的主要语言.我非常喜欢它.
但我仍然在努力以功能的方式进行非常具体的操作.
一个简化的例子:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
Run Code Online (Sandbox Code Playgroud)
我想将这些条目相互比较.使用像C或Python这样的语言,我可能会创建一些复杂的循环,但是我不确定哪种方法(map,fold,list comprehension?)对于函数式语言来说是最好的还是最有效的.
这是我开始研究的代码示例:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
Run Code Online (Sandbox Code Playgroud)
谓词使列表理解不会将条目与自身进行比较,但该函数效率不高,因为它比较了已经比较的条目.例如.它会将Bob与Megan进行比较,然后将Megan与Bob进行比较.
如何解决这个问题的任何建议将不胜感激.
如果您对数据类型有订单,则可以使用x < y而不是x /= y.
另一种方法是tails避免比较相同位置的元素:
[ ... | (x:ys) <- tails xs, y <- ys]
Run Code Online (Sandbox Code Playgroud)
这具有仅挑选在原始列表y中发生的项目的效果x.如果您的列表包含重复项,则需要将其与之前的显式过滤相结合.
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |