Rückkehr aus einer verschachtelten Schleife in Common Lisp

Ich versuche, diesen Python-Code in Common Lisp umzuwandeln:

for a in xrange(1,1000):
    for b in xrange(a,1000):
        c = (a**2 + b**2) ** 0.5
        s = a + b + c
        if s == 1000:
            return a * b * c

Mein erster Versuch war:

(loop for a from 1 to 999
      do (loop for b from a to 999
               for c = (sqrt (+ (expt a 2) (expt b 2)))
               for s = (+ a b c)
               until (= s 1000)
               finally return (* a b c))))

Das geht nicht. Meine Aufgabe ist: wanns Treffer 1000 bewirken, dass der gesamte Ausdruck über return steht(* a b c). Wie man einen Wert von einem verschachtelten Schleifenmakro zurückgibt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage