Rambo är nöjd med hjälpen
Rambo 121
Postad: 5 jun 2020 Redigerad: 5 jun 2020

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?

Tegelhus 202
Postad: 5 jun 2020 Redigerad: 5 jun 2020

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 121
Postad: 5 jun 2020

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 Avbryt
Close