列表理解但不同的顺序

时间:2013-12-15 12:22:46

标签: haskell

我想知道这些与定义之间是否存在差异。

[(x,y)| x<-[1..10000], x=2000,y<-[1..100], odd y]
[(x,y)| x<-[1..10000],y<-[1..100], x=2000, odd y]

两者都会生成相同的元组列表。 但是如果我们的编译器没有进行任何优化。 我怎样才能找出哪一个更快。 在这两种情况下,x<-[1..10000]都会向我们提供[1,2.. 20000] since x==2000.的列表 将以什么顺序评估y值?

1 个答案:

答案 0 :(得分:3)

事情是从左到右执行的。把它想象成嵌套循环。所以在第一个中,x的测试执行10000次,而在第二次执行中则执行1000000次。

将条件向外移动以加速执行被称为“过滤器促销”;大卫特纳(1980年)创造的一个术语。