I am having this if-else clause in haskell.
let f x y = if y/=0 then f (x+1) (y-1) else x in f 3 5
The result is 8. I can't understand why.
Can somebody explain it to me STEP-By-STEP? Thanks for help!
Ok, so let's first make the function definition a bit more clear by using indentation
let f x y =
if y/=0
then f (x+1) (y-1)
else x
in f 3 5
So f is called with arguments 3
and 5
at first. y
being 5 (i.e. not 0), the then
branch is executed, which calls f with arguments 4
and 4
. Since y
is still not equal to 0, we go into the then
branch again and call f with arguments 5
and 3
. This goes on until we finally call f with x = 8
and y = 0
. We then go into the conditional's else
branch, which just returns x
, i.e. 8.
Here is one way the expression f 3 5
could be reduced:
f 3 5 -- y /= 0, so we go into the then branch
=> f (3 + 1) (5 - 1)
=> f 4 4 -- then branch again
=> f (4 + 1) (4 - 1)
=> f 5 3
=> f (5 + 1) (3 - 1)
=> f 6 2
=> f (6 + 1) (2 - 1)
=> f 7 1
=> f (7 + 1) (1 - 1)
=> f 8 0 -- this time we go into the else branch
=> 8
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With