题
我需要做这样的事情,但是在ACL2中:
for (i=1; i<10; i++) {
print i;
}
它使用常见的LISP,但我不知道该如何完成此任务...
我们不能使用标准的通用LISP结构,例如循环,做。只是递归。
我有一些链接,但我发现很难理解:
解决方案
本节“访问所有自然数量从n到0” ACL2编程的温和介绍 解释如何做。
在您的情况下,您想按上升顺序访问数字,因此您的代码应该看起来像这样:
(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.
.
.
.)))
其他提示
使用递归的解决方案:
> (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
(defun foo-loop(n)(cond((zp n)“ done”)(t(prog2 $(cw“ 〜x0” n)(foo-loop(1- n)))))))))))))))))
(foo-loop 10)
您可以重做终止条件和递归,以模仿1到10。
不隶属于 StackOverflow