私はこのようなものを作る必要がありますが、ACL2では:
for (i=1; i<10; i++) {
print i;
}
COMMON LISPを使用していますが、このタスクを実行する方法がわかりません...
LOOP、DOなどの標準のCommonLisp構造を使用することはできません。ただ再帰。
私はいくつかのリンクを持っていますが、理解するのは非常に難しいと思います:
私はこのようなものを作る必要がありますが、ACL2では:
for (i=1; i<10; i++) {
print i;
}
COMMON LISPを使用していますが、このタスクを実行する方法がわかりません...
LOOP、DOなどの標準のCommonLisp構造を使用することはできません。ただ再帰。
私はいくつかのリンクを持っていますが、理解するのは非常に難しいと思います:
再帰を使用するソリューション:
> (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
ACL2プログラミング入門の「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.
.
.
.)))
(defun foo-loop(n)(cond((zp n) "done")(t(prog2 $(cw "〜x0" n)(foo-loop(1- n)))))
(foo-loop 10)
終了条件と再帰をやり直して、1から10への移行を模倣できます。