質問

私はこのようなものを作る必要がありますが、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))))))))

(フーループ10)

終了条件と再帰をやり直すには、1から10に進むことを模倣できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top