t3x.org / sketchy / library / expt.html
SketchyLISP
Reference
  Copyright (C) 2007
Nils M Holm

expt

Conformance: R5RS Scheme

Purpose: Raise a number to a power. Return x raised to the power of y. X may be a natural or integer number. Y must be natural.

Arguments:
X - number (base)
Y - number (exponent)

Model:

(define (expt x y)
  (letrec
    ((exp
       (lambda (x y r)
         (cond ((zero? y) r)
           (else (exp x (- y 1) (* x r)))))))
    (exp (integer x) (natural y) 1)))

Implementation:

(define (expt x y)
  (letrec
    ((square
       (lambda (x)
         (* x x)))
     (_expt
       (lambda (x y)
         (cond ((zero? y) 1)
           ((even? y)
             (square (_expt x (nquotient y 2))))
           (else (* x (square (_expt x (nquotient y 2)))))))))
    (_expt (integer x) (natural y))))

Example:

(expt 2 5) 
=> 32

See also:
digits, sqrt, gcd.