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.

Slides:



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

Detta har du vetat länge…. Klicka för att gå vidare.
ETT SÄTT ATT BESKRIVA VERKLIGHETENS SITUATIONER MED MATEMATIK
Visual Basic - Genomgång
Talföljder formler och summor
Skapa jullåtar i grupp med Garageband
Textrespons Vad är bra i berättelsen? En händelse? En formulering
Andragradsfunktioner & Andragradsekvationer
Föreläsning 7, Kapitel 7 Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
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:
Den uppsats ni är på väg att skriva skall en vacker dag presenteras muntligt. I betygskriterierna för Svenska C står det att eleven, skall använda sig.
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Logikprogrammering Ons, 25/9
Föreläsning 2 Datalogi för E1 2D1343
Distribuerade filsystem
© 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.
Java. Kortfattat om Java Syntaxen påminner i hög grad om C++ Stöd för objektorientering Kod kan köras i en virtuell maskin som finns tillgänglig för nästan.
En PowerPoint om PowerPoint
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Teoridel 1 Grunder i uppställning och försvarsspel
Programmering B PHP Lektion 2
If you want to build a ship, don´t herd people together to collect wood and don´t assign them tasks and work, but rather teach them to long for the endless.
Programmering B PHP Lektion 3
Vad är du för typ av person?
Detection of similarity between documents Axel Bengtsson Ola Olsson
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; }
Logikprogrammering och Prolog
Word Read Plus 08 talsyntes
Programmering B PHP Lektion 3
Retorik Konsten att tala Hur håller man ett bra argumenterande tal?
Max start-guide Liten och väldigt snabbt ihopkastad.
The Blue Day Book Bradley Trevor Greive (ISBN: )
Presens och imperfekt av have. Translate! Jag har huvudvärk. Hon har en röd Volvo. De har två barn tillsammans.
Tes och argument Tes: det påstående argumentationen gäller
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Finns konst? Ja Nej. Är konst materia? JaNej Är allt konst? Ja Nej.
Träning 13 Makroprogrammering
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Annika Hultén Vem skriver vad till vem och i vilket syfte? Några källkritiska tips när du använder nätet.
Namnrum, räckvidd och rekursion Linda Mannila
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.
Problemlösningsmetodik
Att skriva dikter.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
SCHOOL OF HUMAN SCIENCES Värdepedagogiskt forskningsfält på HiK Utgår från den del av den pedagogiska praktiken som leder till att barn och unga utvecklar.
Logikprogrammering 16/ : operatorer Staffan Larsson.
Att Skapa Serier.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
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.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
1 Föreläsning 13 programmeringsteknik och Matlab Funktioner, styrstrukturer, mer om matriser.
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.
Love, love, love Bibelstudium, Love Each Other,
Regler för citatteknik
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Formell logik Kapitel 5 och 6
Formell logik Kapitel 7 och 8
Presentationens avskrift:

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 Prolog Now!

Klipp (Cut) Hur ser det ut? –!/0 –En inbyggd procedur som alltid lyckas Vad gör det? –Förhindrar backtracking –‘klipper i sökträdet’ Motivering –Effektivare program –Ökad uttryckskraft (Negation as failure) Problem –Klipp kan förstöra den deklarativa läsningen av ett program och därmed göra dem svårare att förstå!

Klipp – Ett enkelt exempel p :- q, !. p :- r. q :- s. q :- t. s. |?- p. Klippet gör att varken r/0 eller t/0 kommer att prövas. Hade anropet av q/0 misslyckats hade de däremot prövats.

Gröna och röda klipp Grönt klipp: –deklarativ läsning intakt –Varje klausul i ett predikat ’står för sig själv’ Rött klipp: –förstör den deklarativa läsningen

Exempel – max/3 Deklarativ formulering. Två sanna påståenden. Ömsesidigt uteslutande fall. max(A,B,A) :- A >= B. max(A,B,B) :- B > A. Problem –Lämnar en onödig valpunkt (choice point) efter sig.

Exempel – max/3 En fortfarande deklarativ men något effektivare version: max(A,B,A) :- A >= B, !. max(A,B,B) :- B > A. Problem –En onödig beräkning av B>A genomförs.

Exempel – max/3 OK, men vad sägs om följande? max(A,B,A) :- A >= B, !. max(A,B,B). Problem –Rött klipp. Ej deklarativt. Klausuler kan inte läsas som påståenden oberoende av varandra. –Men vad värre är: Programmet är inkorrekt!! Prova t.ex. med följande mål, som ska misslyckas, men som inte gör det: |?- max(4,1,1). yes

Exempel – max/3 Korrekt version: max(A,B,C) :- A >= B, !, C = A. max(A,B,B). % B > A |?- max(4,1,1). yes Sensmoral: Bind inte resultatvariabler förrän efter klippet!

Parentes: En liten övning Definiera ett predikat max/4, som är sant omm värdet i det fjärde argumentet är det högsta av värdena i de tre första argumenten.

En vinnande strategi Sätt inte ut något klipp alls i den första versionen av ett program. Satsa på korrekthet i första hand. Låt varje klausul i sig bilda ett sant påstående. Lägg sedan till klipp för att eliminera onödiga ihågkommanden och/eller beräkningar. Så snart du tänker sätta ut ett klipp, tänk så här: Är detta rätt, är detta bra? Finns det något annat sätt att t.ex. representera data, så att jag slipper sätta ut några klipp? Sätt klippen på rätt ställe! Ett klipp skall placeras precis där man vet att det nuvarande valet av klausul är det rätta, varken förr eller senare.

Den rätta inställningen Sparsamhet är en dygd! Ju färre klipp, ju lättare är programmet att läsa och att förstå! Klipp ska betraktas som ett nödvändigt ont! Använd hellre negation och if-then-else

Saker som bör väcka ens misstanke om att allt kanske inte står rätt till... Det finns fler än ett klipp i kroppen på en klausul. Den sista klausulen i ett predikat innehåller ett klipp. Anropet av ett indeterministiskt predikat följs direkt av ett klipp. Resultatvariabel binds före klippet.

Exempel Ibland ser man: foo(X) :- …, member(X,[…]), !, … Förmodligen vill man ha foo(X) :- …, member_check(X,[…]), … Sensemoral: Om ett anrop av ett indeterministisk predikat följs direkt av ett klipp så är något förmodligen fel.

Övning Definiera member_check/2

If-then-else Inbyggt predikat. Bör ofta användas i stället för klipp. max/3: max(A,B,C) :- (A >= B ->C = A ;C = B ).

If-then-else Definieras som (P -> Q ; R) :- call(P), !, call(Q). (P -> Q ; R) :- call(R). Fundera över max(A,B,C) :- (A >= B ->C = A ;C = B ).

If-then-else If-then-else betyder att foo(X) :- test(X), !, do_something(X). foo(X) :- do_something_else(X). Kan skrivas som foo(X) :- (test(X) ->do_something(X) ;do_something_else(X) ).

fail/0 fail/0 är ett inbyggt predikat som alltid är falskt, dvs som alltid misslyckas Används för att tvinga fram backtracking

Negation Negation as failure (to prove) Inbyggt predikat: \+ Kan definieras i termer av call/1, cut, och fail/0, på följande vis: \+(Goal) :- call(Goal), !, fail. \+(_).

Negation \+ fångar inte riktigt ‘klassisk’ logisk negation The closed world assumption I ett anrop av \+ G måste G vara grund. Exempel: p(a). |?- p(X). Yes, X = a. |?- \+ \+ p(X). true, X is not instantiated

repeat/0 Lyckas alltid, och när man backtrackar så lyckas det igen, och igen, och igen... Använd för att implementera repeatloopar, t.ex.: process_file(F) :- see(F), % Open file F repeat, read(T), % Read a term process_term(T), % Process it T == end_of_file, % Loop back if not at end of file !, seen. % Close the file