Prolog, Mån 16/9 Rebecca Jonson.

Slides:



Advertisements
Liknande presentationer
Året var 2004, I en liten stad vid namn Laholm
Advertisements

F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Talföljder formler och summor
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Textrespons Vad är bra i berättelsen? En händelse? En formulering
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Golv, väggar, tak. fönster och en dörr
hej och välkomna EKVATIONER Ta reda på det okända talet.
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
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.
2D1311 Programmeringsteknik med PBL
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:
Algoritmer och data strukturer -Länkade listor
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 4: Listor (kap. 4 & 6) Teori –Introducera listor, en viktig rekursiv datastruktur som ofta används.
Vill du lära dig kort division?
Matematik Kurs C Grafer och derivator.
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Logikprogrammering Ons, 25/9
Satsdelar.
Satsdelar Predikat Subjekt Direkt objekt Indirekt objekt Adverbial
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.
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
IT-kompetens Svenska & Engelska. IT-kompetens Svenska & Engelska.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
C-programmering ID120V William Sandqvist Länkad lista
Introduktion Logikprogrammering HT-02 Staffan Larsson.
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 3: rekursion Teori –Introducera rekursiva definitioner i Prolog –Fyra exempel –Visa att.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 6: Definite Clause Grammars (kap. 7) Teori –Introducerar kontextfria grammatikor och några besläktade.
MaB: Andragradsekvationer
Programmering B PHP Lektion 2
Det svenska kulturarvet: spår 1
Logikprogrammering och Prolog
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Debattera.
Namnrum, räckvidd och rekursion Linda Mannila
En mycket vanlig frågeställning gäller om två storheter har ett samband eller inte, många gånger är det helt klart: y x För en mätserie som denna är det.
Logikprogrammering 21/10 Binära träd
1 Programmera med strängar nr 9 Tal till sträng Sträng till tal Grep Sträng till lista av ord.
Kenneth Wilhelmsson 1 Logikprogrammering 10 P Onsdag 20 november 2002.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Formell logik Kapitel 9 Robin Stenwall Lunds universitet.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Logik med tillämpningar
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
VAD KÄNNETECKNAR EN INSÄNDARE?
Rekursion. En metoddefinition som innehåller ett anrop av sig själv kallas rekursiv.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
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.
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.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
MAKTLEKAR.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
Negativa tal – några exempel
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
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.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
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.
BESÖKET PÅ ÅTERVINNINGSCENTRALEN VI HAR VARIT PÅ STUDIEBESÖK PÅ ÅTERVINNINGSCENTRALEN. ÅTERVINNINGSCENTRALEN ÄR EN SOPTIPP DÄR MAN KAN SLÄNGA SKRÄP SOM.
Huvudsats och bisats– att bygga meningar
Meningar med bisats När vi skriver texter är det bra att använda bisatser. Det är bra att använda bisatser i meningar av många olika anledningar. Dels.
KPP053, HT2015 MATLAB, Föreläsning 4
Presentationens avskrift:

Prolog, Mån 16/9 Rebecca Jonson

Repetition Predikat med listor Rekursiva predikat med listor hänga_gubbe/1 hänga_gubbe([A,n,B,C,D,t,A,E]). ?- hänga_gubbe("infantil"). yes Rekursiva predikat med listor lika_långa/2 lika_långa([],[]). lika_långa([_|Xs],[_|Ys]):- lika_långa(Xs,Ys).

Repetition forts. Basfall: Elementet är huvud på listan member/2 kollar om en term är ett element i en lista Basfall: Elementet är huvud på listan Rekursivt fall: Elementet finns i svansen member(X,[X|_]). member(X,[_|Xs]) :- member(X,Xs).

Repetition forts. append/3, som kallas conc i kursboken, sätter ihop två listor till en tredje lista. Basfall: den första listan är tom – resultatet blir den andra listan Rekursivt fall: den första listan har huvud och svans. I så fall vet vi att den första listans och resultatlistans första element är samma. Resten av resultatlistan fås genom att sätta ihop den första listans svans med den andra listan. append([],Xs,Xs). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). ?- append([1,2],[3],X). Sätter ihop en lista. X = [1,2,3] ? ?- append(Xs,Ys,"lisa"). Kan också dela upp en lista.

Dagens föreläsning Rekursion forts. Ordningen på regler och klausuler i rekursiva predikat, terminering Mappning/Översättning Filtrering

Rekursion Ett predikat är rekursivt om det anropar sig själv med någon del av ett argument. För att rekursionen ska lyckas måste det dessutom finnas minst en klausul utan något rekursivt anrop. Rekursionsfall: regler som någonstans i kroppen anropar sig själv Basfall: fakta eller regler som inte anropar sig självt. Idén med listrekursion är att rekursionsfallet fångar upp en godtyckligt lång lista, delar upp den i en eller flera mindre lista/listor och anropar sig själv med delarna. Eftersom delarna hela tiden blir mindre och mindre så måste vi till slut komma till en liten lista som kan fångas av basfallet/basfallen.

Regel-, klausul- ordning Utan basfall som stoppar rekursionen kan Prolog aldrig terminera. p:- p. Ordningen på regler och klausuler hos rekursiva predikat påverkar predikatets möjlighet till termination. Tips Basfallsregeln först, sedan rekursionsregeln. Rekursionsklausul efter basfallsklausul i kroppen. P:-p Enkelt predikat. Från en deklarativ synvinkel riktig definition om egenskap p gäller så gäller egenskap p. Farligt påstående med tanke på hur prolog jobbar.

Regelordning lika_långa([],[]). lika_långa([_|Xs],[_|Ys]):- ?- lika_långa(X,Y). Ger svar på alla möjliga listor och börjar med svaret att de båda variablerna är tomma listor, sedan en variabel följt av tomma listan, två variabler följt av tomma listan osv. ?- lika_långa2(X,Y). Loopar eftersom den hela tiden kommer gå in i första regeln med de nya variablerna.

Klausulordning barn(anna,maria). barn(maria,alva). barn(alva,eva). härstamma(X,Y):-barn(X,Y). härstamma(X,Y):-barn(X,Z),härstamma(Z,Y). härstamma2(X,Y):-barn(X,Y). härstamma2(X,Y):-härstamma2(Z,Y),barn(X,Z). härstamma3(X,Y):-härstamma3(Z,Y),barn(X,Z). härstamma3(X,Y):-barn(X,Y).

Klausulordning forts. ?- härstamma(alva,Vem). Vem=eva; No LOOP!!! ?- härstamma3(alva,Vem). Vad gör prolog i det här fallet? Trädstruktur på tavlan.

Mappning, översättning Ofta vill man applicera något predikat på varje element i en given lista för att få en annan lista (en mappning eller översättning av listan) Exempel: Predikatet trans översätter svenska ord till engelska ?- trans("bil", X). X = "car” ?- trans("hus", Y). Y = "house” ?- trans("en", Z). Z = "a” ?- trans("ett", Z). Z = "a" Många rekursiva predikat är egentligen varianter på ett och samma tema, man vill applicera något predikat på varje element i en given lista för att få en annan lista.

Translist Nu kan vi skriva ett predikat som översätter svenska meningar givna som listor av ord till engelska meningar. Basfallet är den minsta möjliga listan, i det här fallet tomma listan som översätts till sig själv. translist([], []). Rekursionsfallet är när vi har ett huvud (ett svenskt ord) och en svans (en svensk mening). Huvudet översätts till ett engelskt ord och svansen översätts till en engelsk mening, och resultatet kommer då att ha det engelska ordet som huvud och den engelska meningen som svans. translist([SveOrd|SveMening], [EngOrd|EngMening]) :-trans(SveOrd, EngOrd), translist(SveMening,EngMening).

Translist forts. Observera att det går alldeles utmärkt att översätta från svenska till engelska, så länge predikatet trans/2 klarar av båda riktningarna. ?- translist(["en","bil","är","i","ett","hus"], Engelska). Engelska = ["a","car","is","in","a","house"] ?-translist(Svenska,["a","car","is","in","a","house"]). Svenska = ["en","bil","är","i","en","hus"] ; Svenska = ["en","bil","är","i","ett","hus"] ; Svenska = ["ett","bil","är","i","en","hus"] ; Svenska = ["ett","bil","är","i","ett","hus"] ;

Mappning forts. En variant på mappning är att en term översätts till flera termer Ex. svenska ordet ”bilen” till frasen ”the car” Vi gör om översättningspredikatet till översätta ord till en lista med ord. ?- trans2("bil", X). X = ["car"] ?- trans2("bilen", X). X = ["the","car"] Observera att även ord som översätts till enstaka ord måste ge listor som resultat

Translist2/2 Basfallet är som förut. translist2([], []). Rekursionsfallet översätter huvudet till en lista, och svansen till en annan lista. Slutligen konkateneras de två listorna med append/3 till en resultatlista. translist2([Ord|Mening], Resultat) :- trans2(Ord, Resultat1), translist2(Mening, Resultat2), append(Resultat1, Resultat2, Resultat). I denna version kan vi endast översätta i en riktning, från svenska till engelska. ?- translist2(["bilen","är","i","huset"], Engelska). Engelska = ["the","car","is","in","the","house"]

Filtrering Filtrering: Man vill endast plocka ut vissa element ur listan, andra ska kastas. Antag att vi har ett predikat behåll/1 som säger om en term ska behållas och ett predikat kasta/1 som säger om en term ska kastas bort. Antag dessutom att de termer som ska behållas är de positiva talen (inklusive noll), och de som ska kastas är de negativa. ?- behåll(3). Yes ?- behåll(-3). No ?- kastas(-3). Yes ?- kastas(0). no

Filtrering forts. Då kan vi tillverka predikatet positiva/2 som tar en lista med tal, och behåller de positiva talen som resultat. Vi har ett basfall och två rekursionsfall. Basfallet är åter igen tomma listan. positiva([], []). Det första rekursionsfallet är när vi har ett huvud som ska behållas, då stoppar vi in huvudet i resultatet och filtrerar svansen. positiva([Pos|Resten], [Pos|Positiva]) :- behåll(Pos), positiva(Resten, Positiva). Det andra rekursionsfallet är när huvudet ska kastas, i vilket fall vi inte stoppar in det i resultatet. positiva([Neg|Resten], Positiva) :- kasta(Neg),

Filtrering ?- positiva([1,2,3,4], Lista). Lista = [1,2,3,4]

Tack för idag!