Rambo behöver inte mer hjälp
Rambo 125
Postad: 5 jun 2020 17:35 Redigerad: 5 jun 2020 17:41

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.

Skaft 2373 – F.d. Moderator
Postad: 5 jun 2020 17:44

foo(3) är ett nytt funktionsanrop. Om du följer det på samma sätt, vad blir det?

Tegelhus 227
Postad: 5 jun 2020 17:46 Redigerad: 5 jun 2020 17:46

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?

Rambo 125
Postad: 5 jun 2020 17:57

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!!

Svara
Close