Uppsala universitet
Språkteknologiprogrammet
Logikprogrammering I, vt 2002
Leif-Jöran Olsson

Föreläsning 3: Listor, operatorer och aritmetik
Presentation av kursuppgift

Innehåll

  1. Listor, operatorer och aritmetik
  2. Presentation av kursuppgift

1 Listor, operatorer och aritmetik

Listor

Listor i Prolog markeras på ett enkelt sätt med [ och ], [] kallas tomma listan, det vill säga den innehåller inga element. [1,2,3,4] betecknar en lista med fyra tal. [1,2,[3,4],5] betecknar en lista med fyra element, men ett av dem är i sin tur en lista med två element.

Jämför strukturerna:

                       datum
		       |
	_______________________________             -> datum(2001,04,23)
	|	       |               |
      2001	       04              23

                       .
		       |
	__________________                         -> .(1, .(2, .(3,null)))
	|	          |                           [1,2,3]
        1	          .
	                  |
		   _____________
		   |            |
		   2	        .
		                |
			   _______
			   |      |
			   3	  null
      

Exempel på unifieringar med listor:

PQUnifieringsmängd
[]X{<X, []>}
[a]X{<X,[a]>}
[][X|Y]{}
[a][X|Y]{<X,a>,<Y,[]>}
[a,b,c][X,Y|Z]{<X,a>, <Y,b>, <Z,[c]>}
[a,[[b],c]][X,Y|Z]{<X,a>, <Y,[[b],c]>, <Z,[]>}

Medlem i lista

       medlem(A, [A|R]).
       medlem(A, [B|R]) :-
         medlem(A, R).
       

Sökrymd som illustrerar hur Prolog besvarar frågan medlem(b,[a,b,c]):

Ihopslagning av listor

Att slå ihop listor är ofta nödvändigt.

      slå_ihop([], L, L).
      slå_ihop([X|L1], L2, [X|L3]) :-
        slå_ihop(L1, L2, L3).
      

Borttagning ur lista

Att ta bort saker ur en lista är också ofta användbart.

      ta_bort(X, [], []).
      ta_bort(X, [X|R], R).
      ta_bort(X, [X1|R], [X1|R2]) :-
        ta_bort(X, R, R2).
      
Om man bara vill att den första förekomsten av X ska tas bort, får ett test läggas in i den sista regeln (X \== X1).

Fundera gärna på hur predikaten slå_ihop/3 och ta_bort/3 kan användas inför labben.

Operatorer

För att göra vissa strukturer tydligare kan man definiera operatorer. De kan vara prefix-, infix- eller suffixoperatorer. De har eller kan tilldelas olika precedens, för att följa olika normer.

Aritmetik

OperatorFörklaring
X + Yaddition
X - Ysubtraktion
X * Ymultiplikation
X / Ydivision
X div Yheltalsdivision, (3 / 2 -> 1)
X mod Ymodulo, (resten vid heltalsdivision; 3 / 2 -> 1)
X > YX är större än Y
X < YX är mindre än Y
X >= YX är större än eller lika med Y
X =< YX är mindre än eller lika med Y
X =:= YX är lika med Y
X =\= YX är skilt från Y
istilldelning; X is 2 + 1

2 Presentation av kursuppgift

Kursuppgiften kommer att löpa under resten av kursen med redovisning 5 juni maj kl 10-12 för grupp ett och 13-15 för grupp två. Inlämningstillfälle är sjunde juni om inte annat överenskommits.

Handledning kommer att ges vid sju tillfällen; tisdag 7 maj, tisdag 14 maj, tisdag 21 maj, måndag 27 maj, tisdag 28 maj, torsdag 30 maj och måndag 3 juni. I övrigt se schemat.

Kursuppgiften svarar för 50 % av examinationen.

Rapporten ska bestå av avsnitten sammanfattning, mål/syfte, uppgiftsanalys, implementering och diskussion. Den kommenterade koden läggs i bihang. Detsamma gäller ett körningsexempel.

Det ska tydligt framgå i rapporten, vem som ansvarat för vad och vilka som varit aktiva i olika moment och avsnitt. Alla måste dock ha varit aktiva i programutvecklingen.

Analys och syntes av substantiv och adjektiv

Indata för analys

      filmer -> NNUPIB
      

Indata för syntes

       film.nn, PIG -> filmers
       

Grovstruktur

Börja med att identifiera delproblem utifrån nedanstående grovstruktur.
  1. Läsa från fil, både mönsterfiler och stamfil, och göra om till predikat som läggs till databasen. (Exempelvis: stamlex(stam, lemma, mönster, koddel1) och mönster(mönster, morf, koddel2).)
  2. Inläsning av indata från terminal, börja först med att ange som argument till predikat (bokstavslista).
  3. Välj sökstrategi. Beskriv egenskaperna hos den strategi ni valt i rapporten, ge förslag på alternativ strategi. Hur skulle er strategi fungera om lexikonet skulle vara avsevärt mycket större?
  4. Presentation, utskrift av utdata.


Senast ändrad av Leif-Jöran Olsson 2002-05-05 18:36