我想知道这些与定义之间是否存在差异。
[(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值?
答案 0 :(得分:3)
事情是从左到右执行的。把它想象成嵌套循环。所以在第一个中,x的测试执行10000次,而在第二次执行中则执行1000000次。
将条件向外移动以加速执行被称为“过滤器促销”;大卫特纳(1980年)创造的一个术语。