haskell funktion
Kan någon hjälpa mig förstå den här funktionen som är skriven i haskell:
foo :: Int -> Int
foo 0 = 0
foo 1 = 0
foo 2 = 1
foo n = foo (n-1) + foo (n-2) * foo (n-3)
ifall jag t.ex n = 4 så får jag ju:
foo 4 = foo(3) + foo(2) * foo(1) dvs: foo 4 = foo(3)
men sen förstår jag inte längre. Knappar jag in det här i terminalen får jag ut att foo 4 i terminalen får jag 1. Hur?
pluggade haskell för ett halvår men fick en nu omtenta så man har ju såklart glömt bort en del saker.
foo(3) är ett nytt funktionsanrop. Om du följer det på samma sätt, vad blir det?
Nu har jag inte jobbat med Haskell, men om man utvärderar det borde det väl bli så här:
foo(4) = foo(3), precis som du säger
Och om man sedan utvärderar foo(3) blir det
foo(3) = foo(2) + foo(1) * foo(0) =
= 1 + 1 * 0 =
= 1 + 0 =
= 1
Alltså foo(4)=foo(3)=1
Om jag förstått det korrekt?
aa jäklar man fortsätter från på samma sätt från foo 3. Den metoden stämmer när jag pröver för större värden på n också. Tack!!