Presentation laddar. Vänta.

Presentation laddar. Vänta.

2015-06-29 1 Logikprogrammering ons 4/9 Rebecca Jonson.

Liknande presentationer


En presentation över ämnet: "2015-06-29 1 Logikprogrammering ons 4/9 Rebecca Jonson."— Presentationens avskrift:

1 2015-06-29 1 Logikprogrammering ons 4/9 Rebecca Jonson

2 2015-06-29 2 Repetition mån 2/9 Procedurella/Imperativa vs. Deklarativa språk Procedurella: HUR problemet ska lösas –Java, C++, Pascal etc. Deklarativa: VAD problemet är, datorn bestämmer hur det ska lösa Prolog (Programming in Logic), Universitetet i Marseille –Naturligt språk, Artificiell Intelligens –Enkel, läsbar och koncis programmering.

3 2015-06-29 3 Repetition forts. Prolog som databas med fakta om relationer –gillar(pelle,lisa). Predikatet gillar/2 –Ställighet, antal argument Frågor/Mål ställs till databasen. Svar om huruvida målen uppfylls. ?- gillar(pelle,lisa).yes ?- gillar(pelle,Vad).Vad = lisa; Vad = ….

4 2015-06-29 4 Rep. Forts. Variabler –Stor bokstav –Skiljer sig från andra programspråk: behåller ej värdet utan ”instantieras” (ersätts med olika värden som löser frågan). Sammansatta frågor/Konjunktion -?gillar(lisa,Vad), gillar(astrid, Vad). Backtracking –Svar i olika ordning beroende på hur frågan ställts –Prolog söker uppifrån och ner, samt försöker läsa det första (vänstraste) målet innan den fortsätter.

5 2015-06-29 5 Innehåll dagens föreläsning Termer –Atomer, Tal, Variabler Klausuler –Fakta, Regler, Frågor/Mål Regler Rekursiva Regler

6 2015-06-29 6 Termer Argumenten till ett predikat är termer: Atomer börjar med liten bokstav eller citationstecken –ronaldo, rödvin, sagan_om_ringen, agent007 –’Ronaldo’,’rödvin’, ’+’, ’112’ Tal består enbart av siffror, men kan föregås av minustecken. Kan vara decimaltal. –112, 0, -76, 78.05, -3.14 Variabler stor bokstav eller understreck Sammansatta termer (senare föreläsningar)

7 2015-06-29 7 Variabler Variabler börjar med stor bokstav eller understreck (_) följt av bokstäver, siffror eller understreck T.ex. Vad, Ronaldo, Hej_hopp, _vem, X, X2000 -?studerar(åsa,Vad). (sök alla ersättningar för Vad som uppfyller frågan) -?gillar(X,X). (X måste i båda fallen ersättas med samma sak, d v s vi letar efter ngn/ngt som gillar sig själv. ) -?studerar(Vem,Vad). (Vem och Vad kan här vara antingen olika eller samma).

8 2015-06-29 8 Den anonyma variabeln Variabeln understreck (_) används när man inte är intresserad av en instantiering av variabeln d v s när man in vill ha något svar som ersätter variabeln (t.ex Vad = lisa). T.ex. -?gillar(Vem,_). ( Bara svar på vilka som gillar något och inget svar om vad de gillar.) -?gillar(_,_). (Frågar huruvida det finns en relation gillar mellan några objekt, innebär inte att objekten måste vara samma. )

9 2015-06-29 9 Klausuler Ett prologprogram består av en mängd klausuler som definierar ett antal predikat eller relationer. Klausuler är: Fakta: relationer som är villkorslöst sanna –huvudstad(madrid, spanien). Regler: relationer som är villkorsberoende –miljardarvinge(X) :- barntill(X,stenbeck). Frågor/Mål ställs till prologprogram för att få svar om relationer uppfylls (är sanna). -? huvudstad(madrid,spanien).

10 2015-06-29 10 Regler En regel består av ett huvud och en kropp. HUVUD :- KROPP Där kroppen består av en lista med mål skiljda åt med komma. lycklig(P) :- rik(P), berömd(P). länkade(Sida1,Sida2) :- finns_länk(Sida1,Sida2).

11 2015-06-29 11 Regler forts. Och dubbel_länkade(S1,S2):- finns_länk(S1,S2), finns_länk(S2,S1). Eller länkade(S1,S2):- finns_länk(S1,S2). länkade(S1,S2):- finns_länk(S2,S1). Krav på variabeln, bara personer som kan gilla tycker_om(Ngn, Ngt):- gillar(Ngn,Ngt), människa(Ngn).

12 2015-06-29 12 Rekursiva regler nåbar(Sida2,Sida1) :- finns_länk(Sida1,Sida2). nåbar(Sida3,Sida1):-finns_länk(Sida1,Sida2), finns_länk(Sida2,Sida3). nåbar(Sida4,Sida1):-finns_länk(Sida1,Sida2), finns_länk(Sida2,Sida3), finns_länk(Sida3,Sida4). …… Långt program, djupet alltid begränsat.

13 2015-06-29 13 Rekursiva regler forts. Mer elegant och mindre kod genom rekursion d v s genom att predikatet anropar sig självt: nåbar(X,Z) :- finns_länk(Z,X). nåbar(X,Z) :- finns_länk(Z,Y), nåbar(X,Y). En sida X är nåbar från startsidan om det finns en länk från startsidan till sidan eller om det finns en länk från startsidan till en annan sida som är nåbar för den aktuella sidan X. OBS! ordningen på målen i kroppen viktigt eftersom Prolog försöker lösa första målet först. Likaså är ordningen på reglerna viktiga.

14 2015-06-29 14 Filen links.pl finns_länk(cling,lingvistik). finns_länk(cling,gslt). finns_länk(lingvistik,språkfrågelådan). finns_länk(språkfrågelådan,svenska_akademin). finns_länk(lingvistik,kognitionsvetenskap). nåbar(X,Z) :- finns_länk(Z,X). nåbar(X,Z) :- finns_länk(Z,Y), nåbar(X,Y).

15 2015-06-29 15 Rekursion forts. Efter kompilering ställer vi en fråga till vårt program -? nåbar(Sida,cling). Sida = lingvistik ; Sida = gslt ; Sida = språkfrågelådan ; Sida = kognitionsvetenskap ; Sida = svenska_akademin ; no

16 2015-06-29 16


Ladda ner ppt "2015-06-29 1 Logikprogrammering ons 4/9 Rebecca Jonson."

Liknande presentationer


Google-annonser