为什么像这样的东西在Haskell中运行非常缓慢?
test = [x|a<-[1..100],b<-[1..100],c<-[1..100],d<-[1..100],let x = a]
print $ length test
只需要运行约10^8
个数字,本应在瞬间完成,但看起来却像是永远运行下去,并且几乎崩溃。
let x = a
? - Kamellet x = a
在所有绑定之后,因此x
必须被复制 10^8 次。 - András Kovácslet x = a
对最终的test
结果没有影响,那它是什么意思呢? - Kamelx
现在绑定到了a
。问题在于,由于列表中(>>=)
的定义,a
(因此x
)的值取决于所有绑定。例如,为了真正展示仅具有绑定如何影响结果的效果:[5| _ <- [1..10]]
输出[5,5,5,5,5,5,5,5,5,5]
。 - MasterMastic