SketchyLISP Reference |
Copyright (C) 2006 Nils M Holm |
<<[even?] | [Index] | [gcd]>> |
Conformance: R5RS
Purpose: Compute the 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) (#t (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)))) (#t (* x (square (_expt x (nquotient y 2))))))))) (_expt (integer x) (natural y))))
Example:
(expt 2 5) => 32
<<[even?] | [Index] | [gcd]>> |