04.05.2013 Views

Y - Stp

Y - Stp

Y - Stp

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Logikprogrammering II<br />

Logikprogrammering II<br />

Tomas Englund<br />

Institutionen för lingvistik och filologi<br />

1


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Inledning<br />

Kursen kommer att ges av Mats Dahllöf och Tomas Englund.<br />

Undervisningen kommer att best˚a av en rad föreläsningar samt<br />

laborationer. Examination sker genom inlämning av<br />

laborationer.<br />

2


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Repetition<br />

• Ett Prologprogram utgörs av ett antal predikat.<br />

• Ett predikat kan identifieras genom dess namn<br />

(predikatsymbol) samt dess ställighet (arity,aritet).<br />

Exempel: member/2. Med ställighet för ett predikat<br />

menas hur m˚anga argument det tar.<br />

• Ett predikat kan best˚a av en samling klausuler.<br />

• Klausuler kan vara antingen regler eller fakta.<br />

• En regel har ett huvud och en kropp, enligt huvud :kropp.<br />

3


• Argument till klausuler (regler) kallas termer, termer kan<br />

vara n˚agot av följande:<br />

1. Atomer (lisa,lotta,pelle,kalle).<br />

2. Variabler (X,Y,Ord)<br />

3. Sammansatta termer. En sammansatt term best˚ar av en<br />

funktor samt en mängd argument (termer). np(en,katt).<br />

4


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Mer repetition<br />

• Ett predikat anropas med ett m˚al<br />

• Ett m˚al kan lyckas, misslyckas eller kanske inte terminera.<br />

• M˚al som lyckas binder oftast variabler.<br />

• Ett m˚al som misslyckas binder aldrig variabler.<br />

5


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Listor<br />

• En lista kan inneh˚alla en godtycklig mängd element.<br />

• En lista som inte inneh˚aller n˚agra element kallas tomma<br />

listan. Representeras i Prolog enligt []<br />

• Listor som inte är tomma har ett huvud och en svans.<br />

Huvudet är det första elementet i listan och svansen en<br />

lista med resten av elementen.<br />

• Listor i Prolog representeras egentligen som: [a|[b|[c|[]]]]<br />

eller .(a,.(b,.(c,[])))<br />

Övning: skriv ett predikat equal length(+L1,+L2) som<br />

6


är sant om listorna L1 och L2 är lika l˚anga.<br />

7


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Covingtons rekommendationer<br />

Ett urval, hela texten finns att ladda ner som PDF-dokument<br />

fr˚an adressen<br />

http://www.ai.uga.edu/ mc/plcoding.pdf.<br />

• Alla predikat förutom hjälppredikat skall inledas med en<br />

kommentar p˚a följande format:<br />

%equal length(+L1,+L2)<br />

%<br />

% Programmet kontrollerar om tv˚a<br />

listor är lika l˚anga<br />

% Fler intressanta kommentarer...<br />

Alla argument till ett predikat skall märkas enligt:<br />

8


– +<br />

Visar att argumentet skall instansierat vid anropet.<br />

– -<br />

Visar att argumentet skall vara oinstansierat vid<br />

anropet.<br />

– ?<br />

Visar att argumentet kan men behöver inte vara<br />

oinstansierat.<br />

• Alla predikatnamn skall vara uttalbara.<br />

• Använd inte namn som kan l˚ata likadana.<br />

• Skriv predikatnamnen med gemener och separera ord med<br />

understreck ( ).<br />

9


• Identifiera hjälppredikat genom att lägga till n˚agot av<br />

följande i slutet av dem:<br />

– aux<br />

– x<br />

– xx<br />

– ...<br />

• Predikat vilka representerar egenskaper eller relationer<br />

skall namnges med ett nomen.<br />

• Predikat vilka skall tolkas procedurellt skall namnges med<br />

en imperativ verbfras.<br />

• Argument till ett predikat skall placeras i följande ordning:<br />

10


1. indata<br />

2. mellanresultat<br />

3. slutresultat<br />

• Placera dessutom argumenten i en logisk ordning, s˚a att de<br />

passar med predikatnamnet.<br />

• Använd beskrivande namn för predikat.<br />

• För variabelnamn som best˚ar av flera ord konstruera<br />

namnen s˚a att de olika orden börjar med en versal.<br />

• För lokala variabler använd enkla tecken (e.g korta namn),<br />

enligt:<br />

– För heltal: I,J,K<br />

11


– För listor: L,L1,L2<br />

– För enstaka tecken: C,C1,C2<br />

– För andra termer: A,B,C<br />

– För huvuden i listor: H<br />

– För svansar i listor: T<br />

• Använd enstaka tecken för att representera det första<br />

elementet i en lista och ett nomen i plural för svansen.<br />

• Använd /* */ för att kommentera bort kod och % för att<br />

kommentarer.<br />

• Identera dina kommentarer s˚a att de blir mer lättlästa.<br />

• För kod som kräver ohyggliga mängder kommentarer -<br />

12


skriv om koden.<br />

• Identera alla rader i ett predikat.<br />

• Alla delm˚al skall skrivas p˚a en egen rad, förutom<br />

relaterade par s˚a som write och nl.<br />

• L˚at tv˚a predikat skiljas ˚at av tv˚a tomma rader.<br />

• L˚at inga predikat bli längre än 25 rader om det g˚ar.<br />

Förenkla!<br />

13


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Repition av gamla laborationer<br />

Laboration 1:<br />

Givet en lista av riksdagsledamöter, deklarerade enligt:<br />

riksdagsledamot(’Joe Frans’,man,s,’Stockholms<br />

kommun’,25).<br />

riksdagsledamot(’Ann-Marie<br />

Fagerström’,kvinna,s,’Kalmar län’,13).<br />

riksdagsledamot(’Barbro<br />

Feltzing’,kvinna,mp,’Västra Götalands läns<br />

norra’,233).<br />

riksdagsledamot(’Eva<br />

Flyborg’,kvinna,fp,’Göteborgs kommun’,205).<br />

riksdagsledamot(’Kenneth G<br />

14


Forslund’,man,s,’Västra Götalands läns<br />

västra’,231).<br />

riksdagsledamot(’Joe Frans’,man,s,’Stockholms<br />

kommun’,25).<br />

riksdagsledamot(’Sonja<br />

Fransson’,kvinna,s,’Västra Götalands läns<br />

södra’,244).<br />

riksdagsledamot(’Mia<br />

Franzén’,kvinna,fp,’Stockholms län’,67).<br />

riksdagsledamot(’Lennart<br />

Fremling’,man,fp,’Dalarnas län’,293).<br />

riksdagsledamot(’Gustav<br />

Fridolin’,man,mp,’Stockholms kommun’,29).<br />

15


iksdagsledamot(’Helena Frisk’,kvinna,s,’Örebro<br />

län’,271).<br />

riksdagsledamot(’Reynoldh<br />

Furustrand’,man,s,’Södermanlands län’,82).<br />

16


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Fr˚agor - laboration 2<br />

• Hur ta reda p˚a alla socialdemokratiska<br />

F-riksdagsledamöter?<br />

riksdagsledamot(Namn,Kon,s,<br />

LanKommun,Plats).<br />

• Hur ta reda p˚a alla partier som har b˚ade en kvinnlig och en<br />

manlig ledamot?<br />

riksdagsledamot(Namn1,man,Parti,<br />

K1,Plats1),<br />

riksdagsledamot(Namn2,kvinna,Parti,<br />

K2,Plats2).<br />

17


T. ENGLUND · ALGORITMER FÖR SYNTAXANALYS · 2004<br />

Fr˚agor - laboration 3<br />

Cartesisk produkt.<br />

Givet tv˚a mängder av tecken vill vi skapa den Cartesiska<br />

produkten (korsprodukten) för dem, enligt:<br />

cartesisk produkt([a,b],[c,d],[par(a,b),<br />

par(a,d),par(b,c),par(b,d)])<br />

Hur göra?<br />

18

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!