Frage

Ich brauche, um so etwas wie diese, aber in ACL2:

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

Es benutzt COMMON LISP, aber ich habe keine Ahnung, wie diese Aufgabe...

Wir nicht verwenden standard Common Lisp Konstruktionen, wie zum Beispiel SCHLEIFE, DO.Nur Rekursion.

Ich habe einige links, aber ich finde es sehr schwer zu verstehen ist:

War es hilfreich?

Lösung

Der Abschnitt "Besuch aller natürlichen zahlen von n bis 0" Eine Sanfte Einführung in ACL2-Programmierung erklärt, wie es zu tun.

In Ihrem Fall, die Sie besuchen möchten-zahlen in aufsteigender Reihenfolge, sodass Ihr code sollte wie folgt Aussehen:

(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.
             .
            .
           .)))

Andere Tipps

Eine Lösung, die Rekursion verwendet:

> (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)

Sie können den Beendigung Zustand und die Rekursion nach nachahmen von 1 bis 10 wiederholen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top