Logikprogrammering 16/10 2002: operatorer Staffan Larsson.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Syror, baser och indikatorer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
hej och välkomna EKVATIONER Ta reda på det okända talet.
Funktioner och programorganisation
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Prolog, Mån 16/9 Rebecca Jonson.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Logikprogrammering Ons, 25/9
Dcg-notation 21.2 G 2.3 M (BBS 8). dagens föreläsning extra argument i dcg-notation prolog-anrop i dcg-notation avslutande kommentarer om dcg.
Operatorer.
Subjekt, predikat, objekt, predikatsfyllnad och adverbial
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Introduktion Logikprogrammering HT-02 Staffan Larsson.
Föreläsning 5 Python: argument från kommando-tolken
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
Stora additionstabellen
Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Logikprogrammering och Prolog
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Bedömningskriterier för studentrapporter
Subjekt, predikat, objekt Huvudsats, bisats
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Atomens inre Förra veckan lärde vi oss att atomen bestod av tre partiklar. Protoner, neutroner och elektroner.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
- Atommodellen & periodiska systemet
Logikprogrammering 21/10 Binära träd
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Kenneth Wilhelmsson 1 Logikprogrammering 10 P Onsdag 20 november 2002.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Logik med tillämpningar
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Logikprogrammering –Undervisningsmaterialet NYTT för 2013: –Learn Prolog Now! –SWI Prolog-tolk, startas.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Föreläsning 15 Logik med tillämpningar Innehåll u Programmeringsstil i Prolog u Expertsystem u Att kunna inför tentan u Kapitel 13 och 14.3.
Föreläsning 2 programmeringsteknik och Matlab 2D1312/ 2D1305
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
Logikprogrammering ons 4/9 Rebecca Jonson.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Presentationens avskrift:

logikprogrammering 16/ : operatorer Staffan Larsson

Repetition: termer och unifiering

Sammansatta termer (i kursboken: ”strukturerade objekt”) termer med argument. En sammansatt term består av –ett namn (en atom) –ett antal argument (vilka termer som helst) Namnet på termen kallas funktor antalet argument kallas aritet eller ställighet. Syntax: –Namn(Arg1, Arg2, …, ArgN) –d v s samma som för predikat

exempel relationsschema % föreläsning(?Kurs, ?Föreläsare, ?Tid, ?Lokal) % där Kurs = kurs(Institution, Kursnamn, Kurskod) % Föreläsare = person(Förnamn, Efternamn, Telefonnummer) % Tid = tid(Datum, StartKlockslag, SlutKlockslag) % där Datum = datum(Dag, Månad, År) % Klockslag = klockslag(Timme, Minut) % Lokal = lokal(Byggnad, Lokalnamn)

exempel, forts. Måndagens föreläsning kan då se ut som följer i databasen. föreläsning( kurs(datavetenskap, logikprogrammering, inl070), person(staffan, larsson, ), tid( datum(14,okt,2002), klockslag(13,15), klockslag(15,00)), lokal(matematiskt_centrum, hörsalen) ).

unifiering två termer unifierar, X=Y, om något av följande gäller: 1.någon är en oinstansierad variabel –den kommer att instansieras till den andra termen. 2.båda är atomer som är lika. 3.båda är tal som är lika. 4.båda är sammansatta termer med likadana funktorer och samma aritet, dessutom är motsvarande argument lika.

identitet Två termer är identiska om de är instansierade till samma sak, –Identitet testas med == –motsatsen är \== –två variabler som har unifierats är därefter identiska exempel ?- lisa==lisa. yes ?- X==X. yes ?- X==Y. no ?- X=Y, X==Y. yes

Predikaten arg/3 och functor/3 arg(+ArgNr,+Term,?Arg) –hämtar ett givet argument från en sammansatt term. –exempel: ?- arg(3, datum(15,okt,2001), X). X = 2001

arg/3 och functor/3 forts. Predikatet functor/3 kan användas på två sätt –ta reda på namnet och ariteten av en term functor(+Term,?Namn,?Aritet). exempel ?- functor(datum(15,okt,2001), Namn, Aritet). Namn = datum, Aritet = 3 ?- functor("lisa", Namn, Aritet). Namn = '.', Aritet = 2 –skapa en term om man känner till namnet och ariteten functor(?Term,+Namn,+Aritet). exempel ?- functor(Term, datum, 3). Term = datum(_, _, _) ?- functor(Term, '.', 2). Term = [_|_]

sammansättning och isärplockning av termer Term =.. [Funktor, Arg1, …, ArgN] ?- f(a,b) =.. L L= [f,a,b] ?- T =.. [rectangle, 3, 5]. T= rectangle(3,5) ?- Z =.. [p, X, f(X,Y)]. Z = p(X, f(X, Y))

listor som sammansatta termer förenklat skrivsätt för sammansatta termer uppbyggda av funktorn '.'/2. Man kan skriva dem som listor. ?- [1,2,3,4] = '.'(1, '.'(2, '.'(3, '.'(4, [])))). yes

operatorer

Operatorer Det finns förenklade skrivsätt även för andra termer än listor Vissa funktorer med 1 eller 2 argument kan man skriva som operatorer detta har ni redam använt mer än ni kanske tror används för att öka läsligheten

Matematiska operatorer Funktorerna +, -, *, /, etc är alla deklarerade som operatorer i Prolog. detta betyder att man kan skriva dem mellan sina argument observera att detta bara är ett förenklat skrivsätt - "syntaktiskt socker". ?- X = +(3, *(4, 5)). X = 3+4*5 ?- X = /(-(5,3), +(2,4)). X = (5-3)/(2+4)

prioritetsordning Alla operatorer har en prioritetsordning. Det är detta som gör att * binder hårdare än +, –dvs att 3+4*5 betyder 3+(4*5) och inte (3+4)*5.

associativitet Dessutom har de en associativitet –”-” associerar till vänster –det är detta som gör att betyder (3- 4)-5 och inte 3-(4-5). ? = 3 - (4 - 5). no ? = (3 - 4) - 5. yes Vad blir svaret? –”+” och ”-” är båda vänsterassociativa, med samma prioritet –?- X = 3 – 4 + 5

Jämförelseoperatorer till exempel =, \=, ==, >, <, Alla dessa har lägre prioritet än de matematiska, –för att man ska kunna skriva 3*4=X utan att behöva sätta ut parenteser (3*4)=X. Exempel: ?- =(X, +(3,-(5,6))). X = 3+(5-6)

associativitet för jämförelseoperatorer Jämförelseoperatorerna associerar inte åt något håll; –man får ett syntaxfel om man skriver X = Y = Z. ?- X = Y = 5. {SYNTAX ERROR: in line 1 (within 1-2)}

operatorer som inte är specialtecken En operator behöver inte vara uppbyggd av specialtecken, t.ex. finns operatorn is: ?- X is 3+4. X = 7. ?- is(X, +(3,4)). X = 7

Enställiga operatorer En operator behöver inte ta två argument, vissa operatorer tar ett argument istället. –Detta gör att man slipper skriva parenteser om man vill göra ett tal negativt –man skriver -X istället för -(X).

negationsoperatorn Även negationen \+ är en enställig operator, –man kan skriva \+ test istället för \+(test). ?- \+ a=b. yes. ?- \+(a=b). yes. –men se upp: ?- \+ (X=a, X=b). yes ?- \+(X=a, X=b). {EXISTENCE ERROR: \+(X=a,X=b): procedure user:(\+)/2 does not exist}

Negation och mellanslag Om man har en enställig operator så är det en subtil skillnad med mellanslag. –Om man skriver \+ (p,q) så betyder det, som man antagligen hoppas \+((p,q)) dvs funktorn \+ med ett argument ((p,q)) –Men om man skriver \+(p,q) så betyder det \+(p,q) dvs funktorn \+ med två argument, p och q. Detta är egentligen bara ett problem för just negationen \+. Tag alltså alltid för vana att ha ett mellanslag efter \+ när du programmerar.

Lågprioriterade operatorer I Prolog är faktiskt nästan allt operatorer –negationen \+ –disjunktionen ; –if-then-else-pilen -> –DCG-regel-pilen --> –Prolog-klausul-"pilen" :- a :- b. :-(a,b).

konjunktionsoperatorn Till och med konjunktionen, är en operator, vilket kan leda till lite konstigheter. ?- ';'(X=a, Y=b). X = a ; Y = b; no (more solutions) ?- ','(X=a, Y=b). X = a, Y = b

Deklarera egna operatorer Man kan deklarera egna operatorer hur enkelt som helst. Det är bara att anropa det inbyggda predikatet op/3: ?- op(300, xfx, hoppar). yes ?- A = hoppar(hästen, högt). A = hästen hoppar högt ?

prioritet Det första argumentet är prioriteten, –ju lägre tal desto hårdare binder det. –mellan 1 och 1200 vad blir svaret? –?- op(300, xfx, hoppar). –?- op(400, xfx, och). –?- hasten hoppar hogt och gnaggar = ( hasten hoppar hogt ) och gnaggar.

associativitet Det andra argumentet är associativiteten; –xfx betyder att operatorn inte associerar åt något håll (t ex ”==”) –yfx betyder att operatorn associerar åt höger (t ex ”-” är deklarerad som yfx) ?- a - (b - c) = a - b - c. no ?- (a - b) - c = a - b - c. yes –xfy betyder att operatorn associerar åt vänster (t ex ”:” är deklarerad som xfy)

prefix och postfix associativitet för enställiga operatorer: –fx betyder att operatorn är enställig och prefix, d v s kommer före sitt argument –xf betyder att operatorn är enställig och postfix, d v s kommer efter sitt argument

alla operatorer I slutet av manualen (s. 597) finns en lista med de operatorer som är deklarerade som standard i Prolog, tillsammans med prioriteter och associativiteter. Det finns också en lite mindre lista i kapitel 3.3 i kursboken.