我写了一个函数,其性能foldl
类似于 Maxima 中的 Haskell,
foldl(f,ac,li):=block([con:[],acc:ac],/*print("List=",li,ac),*/
if (is(li#[])) then
(acc:apply(f,cons(acc,[first(li)])),
acc:foldl(f,acc,rest(li))),acc)$
它可以很好地从左侧折叠列表并沿途进行评估,从而防止在缓冲区中积累任何长期未评估的表达式。
我在运行这个时面临的问题,
foldl(lambda([x,y],x+y),0,makelist(i,i,1,97));
PROGN [或被调用者] 中的错误:绑定堆栈溢出。
但是如果我将它运行到 96,它会适当地生成结果。我不明白为什么这个简单的加法会导致问题,因为我没有任何无限循环或内存消耗任务正在进行。