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.

Slides:



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

Atomer, molekyler och kemiska reaktioner
Talföljder formler och summor
78 respondenter. 2 [1] Hur har det varit hemma sedan du var här sist?
X-mas algebra Är du redo? Klicka!!.
Fastighetsboxar. 2 Är du för eller emot att man slutar dela ut posten vid varje dörr från år 2011 och istället delar ut posten i fastighetsboxar som fastighetsägaren.
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.
2D1311 Programmeringsteknik med PBL
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:
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 4: Listor (kap. 4 & 6) Teori –Introducera listor, en viktig rekursiv datastruktur som ofta används.
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
En övning i att formulera sig matematiskt
Vill du lära dig kort division?
Kemisk bindning del 2 Kovalenta bindningar Niklas Dahrén.
Logikprogrammering Ons, 25/9
Stora + Störst tal först. Stora additionstabellen Tanketips!
1 Ingenjörsmetodik IT & ME 2009 Föreläsare Dr. Gunnar Malm.
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.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Allmän kemi för BI.
Rörelse Kapitel 7.
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
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
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å.
Programmering B PHP Lektion 2
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
Logikprogrammering och Prolog
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Byggnadsmekanik gk 2.1 SNITTKRAFTER
Beräkna en ekvation (metod 1)
Algebra och ekvationer
Bild 1 Hur använder vi KursInfo idag? Högskolan i Skövde.
Det handlar om multiplikation
Listor En lista är en föränderlig ordnad samling objekt.
TietoEnator © 2007presentationPage 1 Mina meddelanden Procapita +
Atomens inre Förra veckan lärde vi oss att atomen bestod av tre partiklar. Protoner, neutroner och elektroner.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
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.
Ingenjörsmetodik IT & ME 2008
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Stora subtraktionstabellen
Logik med tillämpningar
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
Föreläsning 4 Listor, tupler, och for-loopar. Listor En lista är en föränderlig ordnad samling objekt. Listor skapas med hakparenteser. lista = [12,13,14,15]
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 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Föreläsning 2 programmeringsteknik och Matlab 2D1312/ 2D1305
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
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.
Presentationens avskrift:

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 vilka termer som helst. Listor läses från vänster till höger, det ”vänstraste” elementet är alltså det första och det ”högraste” är det sista i listan. [första,andra,tredje,fjärde] En lista med atomer [Två,Variabler] En lista med variabler [1,blandad,Lista] En lista med olika typer av termer [] Den tomma listan (utan element) [[en,lista],[av],[listor]] En lista av listor

3 Repetition Antingen är en lista den tomma listan eller så består den av huvud och svans. Huvudet på en lista är det första elementet i listan. Svansen är en lista med resten av elementen. Det sista elementet i en lista har alltid tomma listan som svans. –Listan [a,b,c] består av huvudet a och svansen [b,c] som består av huvudet b och svansen [c] som har huvudet c och svansen []. Den tomma listan har varken huvud eller svans.

4 Repetition En lista kan delas upp i huvud och svans så här: [Huvud|Svans] Generellt kan en (icke-tom) lista skrivas som [A,B,…,K|Resten] där A,B,…,K är de första elementen i listan och Resten är resten av listan. [a,b,c] är samma som [a|[b,c]] som är samma som [a,b|[c]] som är samma som [a,b,c|[]]

5 Repetition Tecken är atomer av längd 1 Strängar är listor med tecken Strängar skrivs i SICStus prolog som ”sträng” - vilket bara är ett enklare sätt att skriva listan [s,t,r,ä,n,g] Motsvarigheten till den tomma listan [] kallas den tomma strängen ””. Den tomma listan och den tomma strängen är precis samma sak. –”pelle” är samma som [p,e,l,l,e] som är samma som [p,e,l,l,e|[]] som är samma som [p,e,l,l,e|””]

6 Dagens föreläsning Predikat med listor –hänga_gubbe/1 Rekursiva predikat med listor –lika_långa/2 –member/2 –append/3

7 Predikat med listor – hänga gubbe/1 hänga_gubbe/1 lyckas för listor med exakt 8 element, där det andra och sjätte elementet är 'n' och 't', och det första och sjunde elementet är lika: hänga_gubbe([A,n,B,C,D,t,A,E]). ?- hänga_gubbe("Lisa och Pelle"). no ?- hänga_gubbe("infantil"). yes

8 hänga_gubbe/1 forts hänga_gubbe([A,n,B,C,D,t,A,E]). ?- hänga_gubbe([A,A,B,A,A,B|As]). A = n, B = t, As =[n,_1] ?- hänga_gubbe([A,A,A,A|As]). A = n, As = [_1,t,n,_2] ?- hänga_gubbe([A,A,A,A,A,A|As]). no

9 Rekursiva predikat med listor Listor kan vara hur långa som helst. Om man ska skriva predikat som gäller för alla listor, behövs oftast rekursion. Vi vill skriva ett predikat som kollar om två listor är lika långa. Man skulle kunna skriva det så här, som en stor mängd fakta: lika_långa([],[]). lika_långa([_,_],[_,_]). lika_långa([_,_,_],[_,_,_]).... Kommer ändå aldrig att täcka in alla listor, eftersom listor kan vara hur långa som helst.

10 lika_långa/2 Vi använder rekursion istället. I rekursiva predikat har man alltid (minst) ett basfall där rekursionen stannar och ett rekursivt fall som innehåller det rekursiva anropet. –Basfall: Tomma listan och tomma listan är lika långa. –Rekursivt fall: Två listor är lika långa om deras svansar är lika långa lika_långa([],[]). lika_långa([_|Xs],[_|Ys]):- lika_långa(Xs,Ys).

11 lika_långa/2 forts Vårt predikat: lika_långa([],[]). lika_långa([_|Xs],[_|Ys]):- lika_långa(Xs,Ys). ?- lika_långa(”sverige",”danmark"). yes ?- lika_langa("sverige","norge"). no

12 lika_långa/2 forts Ungefär så här fungerar det när prolog kommer fram till svaret för ?lika_långa(”sverige”,”danmark”) : –[s,v,e,r,i,g,e] och [d,a,n,m,a,r,k] är lika långa om [v,e,r,i,g,e] och [a,n,m,a,r,k] är lika långa. –[v,e,r,i,g,e] och [a,n,m,a,r,k] är lika långa om [e,r,i,g,e] och [n,m,a,r,k] är lika långa –[e,r,i,g,e] och [n,m,a,r,k] är lika långa om [r,i,g,e] och [m,a,r,k] är lika långa –[r,i,g,e] och [m,a,r,k] är lika långa om [i,g,e] och [a,r,k] är lika långa –[i,g,e] och [a,r,k] är lika långa om [g,e] och [r,k] är lika långa –[g,e] och [r,k] är lika långa om [e] och [k] är lika långa –[e] och [k] är lika långa om [] och [] är lika långa –[] och [] är lika långa, eftersom tomma listan och tomma listan är lika långa.

13 lika_långa/2 forts Och så här fungerar det när prolog kommer fram till svaret för ?lika_långa(”sverige”,”norge”) : –[s,v,e,r,i,g,e] och [n,o,r,g,e] är lika långa om [v,e,r,i,g,e] och [o,r,g,e] är lika långa. –[v,e,r,i,g,e] och [o,r,g,e] är lika långa om [e,r,i,g,e] och [r,g,e] är lika långa –[e,r,i,g,e] och [r,g,e] är lika långa om [r,i,g,e] och [g,e] är lika långa –[r,i,g,e] och [g,e] är lika långa om [i,g,e] och [e] är lika långa –[i,g,e] och [e] är lika långa om [g,e] och [] är lika långa –[g,e] och [] är inte lika långa eftersom det inte finns någon klausul som matchar –Eftersom [g,e] och [] inte var lika långa så misslyckas anropet.

14 member/2 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). ?- member(e,"pelle"). yes ?- member(e,"lisa"). no

15 member/2 forts member/2 kan användas för att räkna upp alla element i en lista. ?- member(X,"pelle"). X = p ? ; X = e ? ; X = l ? ; X = e ? ; no

16 append/3 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).

17 append/3 forts append([],Xs,Xs). append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs). ?- append([1,2],[3],X). X = [1,2,3] ? ?- append("ja","ja",A),append(A,"men",B),append(B,"san",C). A = [j,a,j,a], B = [j,a,j,a,m,e,n], C = [j,a,j,a,m,e,n,s,a,n] ? yes

18 append/3 överkurs Man kan även använda append/3 till att dela upp en lista: ?- append(Xs,Ys,"lisa"). Xs = [], Ys = [l,i,s,a] ? ; Xs = [l], Ys = [i,s,a] ? ; Xs = [l,i], Ys = [s,a] ? ; Xs = [l,i,s], Ys = [a] ? ; Xs = [l,i,s,a], Ys = [] ? ; no