Avatar billede hejhejhej Nybegynder
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" ?
Avatar billede jakoba Nybegynder
03. maj 2004 - 22:19 #1
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
Avatar billede jakoba Nybegynder
03. maj 2004 - 22:20 #2
Ups.  'lat een ned'  ->  'talt een ned'
Avatar billede hejhejhej Nybegynder
13. august 2004 - 17:54 #3
gider du skrive et svar :-)
Avatar billede jakoba Nybegynder
14. august 2004 - 00:20 #4
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester