代码之家  ›  专栏  ›  技术社区  ›  Jorge

在公共Lisp中初始化计数器变量

  •  0
  • Jorge  · 技术社区  · 6 年前

    我想使用公共Lisp函数中的一个变量作为计数器,从所需的数字开始,并在循环中使用。

    (defun x(c)
       (setq i 4)
       (loop while condition do 
            ;do something
            (incf i)))
    

    说明书 setq incf 不适合这样做。在clisp中管理计数器变量的标准方法是什么?

    2 回复  |  直到 6 年前
        1
  •  8
  •   coredump    6 年前

    LOOP 详细说明见 §22. LOOP for Black Belts

    (defun x (c)
      (loop 
        for i from 4 
        while <condition> 
        do <something>))
    
        2
  •  7
  •   Rainer Joswig    6 年前

    在公共Lisp中,需要定义变量。您的变量 i 未定义。那是个错误。

    (defun x (c)
       (setq i 4)                 ; undefined variable i
       (loop while condition do 
            ;do something
            (incf i)))            ; undefined variable i
    

    定义变量:

    CL-USER 9 > (defun x (c)
                  (let ((i 4))     ; defining/binding local variable i
                    (loop while (< i 10) do
                          (print i)
                          (incf i))))
    X
    
    CL-USER 10 > (x :foobar)
    
    4 
    5 
    6 
    7 
    8 
    9 
    NIL
    

    但另一个答案是 堆芯卸载 显示, loop 提供自己的方法来定义变量并对其进行迭代。