Y - Stp
Y - Stp
Y - Stp
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