Lisp 如何在ACL2中使用递归进行循环?
我需要这样做,但在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
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(