考虑LYAH的以下功能:
removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']] GHC会优化elem测试吗?例如通过使用哈希表。如果谓词列表很大,那么这种优化就变得必要了,手动这样做会很烦人,例如通过构造一个Data.set或任何它被调用的东西。
发布于 2017-06-15 07:28:02
如果您使用-O2 -ddump-simpl -dsuppress-all用GHC8.0.2编译它,您可以亲眼看到elem测试没有进行优化:
lvl_r21d = eftChar 65# 90#
removeNonUppercase_go =
\ ds_a1Vs ->
case ds_a1Vs of _ {
[] -> [];
: y_a1Vx ys_a1Vy ->
case elem $fEqChar y_a1Vx lvl_r21d of _ {
False -> removeNonUppercase_go ys_a1Vy;
True -> : y_a1Vx (removeNonUppercase_go ys_a1Vy)
}
}
removeNonUppercase = \ st_aqk -> removeNonUppercase_go st_aqkhttps://stackoverflow.com/questions/43794481
复制相似问题