Ex 9.9 in Paul Hudak's book
Ludovic Kuty
kuty@advalvas.be
Mon, 01 Apr 2002 00:10:02 +0200
At 16:23 31/03/2002 -0500, Antony Courtney wrote:
>Ludovic Kuty wrote:
>>The exercise is short.
>>First, he defines a "fix" function:
>> fix f = f (fix f)
>>Which has the type (a -> a) -> a
>>Then the function "remainder":
>> remainder :: Integer -> Integer -> Integer
>> remainder a b = if a < b then a else remainder (a - b) b
>>The function fix, has far as i understand the matter, has no base case.
>>So if someone wants to evaluate it, it will indefinitely apply the function f
>>to itself, leading the hugs interpreter to its end.
>
>...
>Now let's define a generator to test out y:
>
>> factGen = \f -> \n -> if n==0 then 1 else n * f (n-1)
>> fact = y factGen
Thanks for the combinator.
That's really obscure :)
But it works:
remainder2 :: Integer -> Integer -> Integer
remainder2 = fix remainderGen
where remainderGen f a b = if a < b then a
else f (a - b) b