STUDENT_LIFE
STUDENT_LIFE

Reputation: 37

Haskell Refresh a variables value

I want to refresh a variable value, each time I make a recursion of a function. To make it simple I will give you an example.

Lets say we give to a function a number (n) and it will return the biggest mod it can have, with numbers smaller of itself.

{- Examples:
  n=5 `mod` 5
  n=5 `mod` 4
  n=5 `mod` 3
  n=5 `mod` 2
  n=5 `mod` 1
-}

example :: Integer -> Integer
example n
    |  n `mod` ...  >  !The biggest `mod` it found so far!  && ... > 0
       = !Then the biggest `mod` so far will change its value.
    |  ... = 0 !The number we divide goes 0 then end! = 0

Where ... = recursion ( I think)

I don't know how I can describe it better. If you could help me it would be great. :)

Upvotes: 0

Views: 120

Answers (1)

Cirdec
Cirdec

Reputation: 24166

You can write it as you described:

example :: Integer -> Integer
example n = biggestRemainder (abs n) 0
    where
        biggestRemainder 0 biggestRemainderSoFar = biggestRemainderSoFar
        biggestRemainder divisor biggestRemainderSoFar = biggestRemainder (divisor - 1) newBiggestRemainder
            where
                thisRemainder = n `mod` divisor
                newBiggestRemainder = case thisRemainder > biggestRemainderSoFar of
                    True -> thisRemainder
                    False -> biggestRemainderSoFar

This function can also be written more easily as

example2 :: Integer -> Integer
example2 0 = 0
example2 n = maximum $ map (n `mod`) [1..(abs n)]

Upvotes: 2

Related Questions