03. maj 2004 - 20:23
Der er
3 kommentarer og
1 løsning
Hjælp til forståelse af en rekursiv funktion
Jeg sidder og læser lidt om programmerings-sproget PROLOG, og er stødt ind i et mindre problem. Jeg kan ikke forstå hvorfor nedenstående funktion fungerer:
sum_to( 1, 1 ).
sum_to( N, Res ) :-
N1 is N - 1,
sum_to( N1, Res1 ),
Res is Res1 + N.
det jeg især ikke fatter er sætningen "sum_to( N1, Res1 )" hvad er res1, kan ikke se den har nogen værdi. Hvorfor når den nogensinde nå ned til "Res is Res1 + N" ?
Du skal ikke tænke i funktionskald, men i lister
sum_to ( N1, Res1 ),
er en liste med 2 elementer, hvor andet element igen er en liste med 2 elementer
når prolog møder den linie kikker den på sine sum_to definitioner.
Hvis N1 har værdien 1 macher den første definition pg Res1 får derfor værdien 1.
Hvis N1 har en anden værdi er det den anden definition der matcher og N bliver lat een ned før den prøver igen (rekursivt indtil N1 == 1)
og på vej ud af rekursionen bliver alle de andre N værdier har haft lagt til og det endelige resultat afleveres i Res.
Altså det du ser som 'anden parameter' er slet ikke en parameter, det er funktionens resultat.
mvh JakobA