Potenzen berechnen

Die e-te Potenz einer Zahl x lässt sich durch eine Rekursion berechnen, indem man mehrere Fälle unterscheidet:

- Wenn e keine ganze Zahl ist, wird eine Ausnahme ausgelöst.
- Wenn e gleich 0 ist, dann ist das Ergebnis 1.
- Wenn e gleich 1 ist, dann ist das Ergebnis x.
- Wenn e kleiner als 0 ist, wird der Kehrwert der (- e)-ten Potenz von x berechnet.
- Wenn e eine gerade Zahl ist, dann wird rekursiv die (e/2)-te Potenz von x berechnet und dann mit sich selbst multipliziert.
- Und wenn e eine ungerade Zahl ist, dann wird x mit der (e-1)-ten Potenz multipliziert.

So, wie in der Aufzählung der Fälle beschrieben, geht die Funktion expt vor:

(defproc expt (x e)
  (cond
    ((not (integer? e))
      (throw (quote error) "exponent must be an integer"))
    ((= e 0)
      1)
    ((= e 1)
      x)
    ((< e 0)
      (/ 1 (expt x (- e))))
    (t
      (let
        ((half-e (/ e 2)))
        (if
          (integer? half-e)
          (let
            ((half-expt (expt x half-e)))
            (* half-expt half-expt))
          (* x (expt x (- e 1))))))))


expt.sheet.xml