x^y

Toralf Wittner wittner@uni-duesseldorf.de
Tue, 18 Dec 2001 17:43:33 +0100


Hello,

you can count me as a newbie in functional programming. I'm attempting to 
define a function that computes the value of x^y for whole numbers. Intuively 
(all efficiency considerations aside) I would start with something like this:

power x y
	| x == 0	= 0
	| y == 0	= 1
	| y > 0		= x * power x (y-1)
	| y < 0		= 1 / fromInteger x * power x (y+1)

One recognizes that the function returns either an integer value if y > 0 or 
a float value if y < 0. Therefore I can't write a signature like 
pow :: Integer -> Integer -> Integer nor can I do 
pow :: Integer -> Integer -> Double. If I would use Python I could write 
something like this:

def power(m, n):
	if m == 0: return 0
	if n == 0: return 1
	if n > 0: return m * power(m, (n-1))
	if n < 0: return (1 / float(m)) * power(m, (n+1))

How then would I write this function in Haskell (concerning types)?

Thanks in advance! Kind regards,
Toralf