Lisp 如何在ACL2中使用递归进行循环?

Lisp 如何在ACL2中使用递归进行循环?,lisp,common-lisp,acl2,Lisp,Common Lisp,Acl2,我需要这样做,但在ACL2中: for (i=1; i<10; i++) { print i; } 用于(i=1;i使用递归的解决方案: > (defun for-loop (from to fn) (if (<= from to) (progn (funcall fn from) (for-loop (+ from 1) to fn)))) ;; Test > (for-loop 1 10 #'(la

我需要这样做,但在ACL2中:

for (i=1; i<10; i++) {
    print i;
}

用于(i=1;i使用递归的解决方案:

> (defun for-loop (from to fn)
    (if (<= from to)
       (progn
         (funcall fn from)
         (for-loop (+ from 1) to fn))))

;; Test
> (for-loop 1 10 #'(lambda (i) (format t "~a~%" i)))
1
2
3
4
5
6
7
8
9
10
NIL
>(循环的解除(从到fn)
(如果((对于循环110#')(lambda(i)(格式t“~a~%”i)))
1.
2.
3.
4.
5.
6.
7.
8.
9
10
无
中的“访问从n到0的所有自然数”一节介绍了如何执行此操作

在您的情况下,您希望按升序访问数字,因此您的代码应该如下所示:

(defun visit (n max ...)
  (cond ((> n max) ...)             ; N exceeds MAX: nothing to do.
        (t .                        ; N less than or equal to MAX:
            . n                     ; do something with N, and
             .
              (visit (+ n 1) max ...) ; visit the numbers above it.
             .
            .
           .)))
(除氟循环(n) (cond((zp n)“完成”) (t(项目2$(cw“~x0”n) (foo循环(1-n‘‘‘‘‘))

(foo循环10)

您可以重做终止条件和递归以模拟从1到10的过程。

ACL2错误在(DEFUN FOR-LOOP…):IF接受3个参数,但在调用中(IF(其返回-ACL2 p!>(DEFUN FOR-LOOP(from to-fn)(IF(