- 论坛徽章:
- 2
|
回复 36# starwing83
"$(echo date)" 。。。 我懂了。。。
其实昨天重点都不在jark, 而是map/filter到底返回什么。我很担心它们是直接返回一个table。
- for x in map(f2, filter(f1, map(f0, xs) ) ) do print(x) end
复制代码 如果要用列表操作以及它们的组合代替手写循环,需要达到的目标是上面的代码的空间代价是类似:
- for x0 in xs do
- local x1 = f0(x0)
- local x2 = f1(x1)
- if not x2 then continue end -- 有 continue 么???
- local x3 = f2(x2)
- print(x3)
- end
复制代码 每一个元素的代价与处理的步骤多少(此处是f0,f1,f2)正相关都可以接受。
haskell还可以进一步优化为 local x2 = f1(f0(x)) 以及 print(f2(x2)) ;clojure我怀疑不行。
但整个循环的代价一定不能与元素个数(此处是xs的元素个数)有关。 否则就没意义了。
haskell是通过惰性求值完成的, clojure是通过seq(正在准备转换为recipe)。 而我听你说gfor用来把关什么的, 我就担心map会产生整个table。
准备说完jark后重点说这个的。。。 结果。。。 只听你说道map是产生一个函数。。。 那至少大方向没问题了。。。 |
|