You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lisp的loop宏内仅计算一次高开销函数f并按条件收集结果

当然有,直接用LOOP宏原生的迭代变量绑定语法就可以实现,完全不需要在LOOP外部额外声明变量:

(loop for i from 1 to 10
      for fi = (funcall f i)
      when (> fi 0)
      collect (list i fi))

说明

  • 这里的for fi = (funcall f i)是LOOP的标准子句,每一轮迭代只会计算一次(funcall f i),并将值绑定到LOOP内部的局部变量fi上,既满足了函数f仅计算一次的性能要求,也不会有变量泄露到LOOP外部。
  • 你最开始的写法无法正常运行,原因是when (... collect)写在了do的表达式块内部,不属于LOOP宏的原生子句,收集的结果不会被LOOP作为返回值返回,而用上述原生子句的写法可以直接和when、collect等LOOP标准子句配合,完全符合语法规则。

内容的提问来源于stack exchange,提问作者Garrett Badeau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:54:03