【问题标题】:Lisp loop do let whenLisp 循环让何时
【发布时间】:2021-06-18 16:20:38
【问题描述】:

我正在尝试做这样的事情

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

f 的计算成本很高,所以我只想计算一次。

这不起作用,所以我在循环范围之外引入我的 fi 局部变量:

(let ((fi nil))
  (loop for i from 1 to 10
        do (setf fi (funcall f i))
        when (> fi 0)
        collect (list i fi)))

有没有完全包含在循环宏中的方法(如第一种方法)?

【问题讨论】:

标签: lisp common-lisp


【解决方案1】:

两个独立的for 子句就可以了:

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

两个迭代子句将在每次迭代时执行。第二个将看到i 的每个新值。

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 2020-05-23
    • 2018-11-11
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多