Uppsala universitet
Institutionen för lingvistik
Logikprogrammering I, vt 2002
Leif-Jöran Olsson

Laboration 3: Listor och aritmetik

Innehåll

  1. Syfte
  2. Genomförande
  3. Uppgifter
  4. Redovisning

1 Syfte

Syftet med denna laboration är att få en grundläggande förståelse för hur datastrukturen lista kan användas och hur enkel aritmetik utförs i ett Prologsystem.

2 Genomförande

Tänk på att anteckna frågor och annat som dyker upp inför genomgången. Jobba gärna två och två.


3 Övningar

  1. Konsultera /local/kurs/lpI02/medlem.pro och ställ några frågor, till exempel medlem(1,[1,2,3]) eller medlem(p,[a,3,b,p]), som sedan listas i labbrapporten.

  2. Konsultera /local/kurs/lpI02/ta_bort.pro och ställ några frågor, till exempel ta_bort(1,[2,3],R) eller ta_bort(c,[a,b,c], R), som sedan listas i labbrapporten. OBS! Svaret på alla frågorna behöver inte bli ja.

  3. Konsultera /local/kurs/lpI02/slå_ihop.pro och ställ några frågor, till exempel slå_ihop([a,2],[3],R) eller slå_ihop([4,b,b,c],B,R), som sedan listas i labbrapporten.

  4. Skriv ett predikat räkna_element/2, (/2 anger att predikatet ska ha två argument), som ger som svar hur många element en lista innehåller. Exempelvis:
        | ?- räkna_element([1,2,3,5],S).
        
        S = 4 ?
        
        yes
        
  5. Testa unifieringarna, från tabellen under F3#listunifiering, och lista svaren. Ställs som fråga P = Q. Till exempel
    | ?- [a,b] = R.

  6. Skriv ett predikat udda_jämnt/2, som ger som svar udda eller jämnt beroende på vilket tal som anges. Exempelvis:
        | ?- udda_jämnt(2,S).
        S = jämnt ?
        
        yes
        
  7. Skriv ett predikat ta_bort_alla/3, som ger som svar en lista där alla förekomster av det angivna är borttagna. Exempelvis:
        | ?- ta_bort_alla(1,[1,2,1,3,1],S).
        
        S = [2,3] ?
        
        yes
        
  8. Skriv ett predikat vänd_på_lista/2, som ger som svar en lista där alla element kommer i omvänd ordning. Exempelvis:
        | ?- vänd_på_lista([1,2,3],S).
        
        S = [3,2,1] ?
    
        yes
        
  9. Skriv ett predikat summera_lista_med_tal/2, som ger som svar summan av alla element i listan. Exempelvis:
        | ?- summera_lista_med_tal([1,2,3],S).
        
        S = 6 ?
    
        yes
        


4 Redovisning

Redovisning lämnas i form av skriftlig rapport till Leif-Jöran Olsson (i postfacket eller via e-post i postscriptformat eller vanlig text) senast klockan tretton den femtonde maj.

Rapporten ska innehålla/behandla det som tas upp i uppgiftsbeskrivningen ovan.

Rapporten kommer att ges betyget godkänd, väl godkänd eller underkänd enligt följande:


Lycka till! Och kom ihåg - prolog älskar er alla den här veckan också!


Senast ändrad av Leif-Jöran Olsson 2002-05-06 12:24