Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1).

Relevanta dokument
Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

DD1361 Programmeringsparadigm HT15

Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

DD1361 Programmeringsparadigm HT17

Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13

DD1361 Programmeringsparadigm HT16

Del : Paradigmer allmänt.

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Innehåll. Föreläsning 7. Satslogiken är för grov. Samma sak i predikatlogik: Första ordningens predikatlogik. Logik med tillämpningar

Länkning av Prolog under C

Lådmodellen....eller procedure box control flow model. Dynamisk bild av ett prologprogram Förklarar i detalj procedurell läsning av ett program.

Del : Paradigmer allmänt.

Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006

DD1361 Programmeringsparadigm. Carina Edlund

Traditionell Programmering

DD1361 Programmeringsparadigm HT15

Prova på-laboration i Prolog

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Föreläsning [ ] i programmeringsparadigm. Om multiparadigm-språket OZ och en tjock bok.

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

DD1361 Programmeringsparadigm HT15

Förra gången: Primitiva data

Föreläsning 7: Syntaxanalys

Ett Logikprogram. Logik och Programmering. Introduktion till PROLOG, dvs. PROgramming in LOGic. Viktiga begrepp/områden i Prolog. Framtiden?

TATA42: Föreläsning 9 Linjära differentialekvationer av ännu högre ordning

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Logikprogrammering. Undervisningsmaterialet NYTT för 2013: Learn Prolog Now! SWI Prolog-tolk, startas under tuxedo/ pingvinerna med swipl!

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

Funktionell programmering. Haskell. Ge#ng started...

Föreläsning 10 i programmeringsparadigm. Boxmodellen för append.

Deklarativt programmeringsparadigm

Grundläggande logik och modellteori (5DV102)

Grundläggande logik och modellteori

Semantik och pragmatik (Serie 4)

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Grundläggande logik och modellteori

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 11 i programmeringsparadigm. Boxmodellen i Sicstus-manualen.

TATA42: Föreläsning 8 Linjära differentialekvationer av högre ordning

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska kunnas?

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska ni kunna?

Föreläsning 5-6 Innehåll

K3 Om andra ordningens predikatlogik

I en deterministisk omgivning beror nästa tillstånd bara av agentens handling och nuvarande tillstånd.

Föreläsning 3: rekursion

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

En introduktion till predikatlogik

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Dagens föreläsning Programmering i Lisp Fö 5

Föreläsning 9: NP-fullständighet

Substitution och unifiering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Övningshäfte 2: Induktion och rekursion

Innehållsförtekning Sida. Inledning 3 Vad är fuzzy logic? 3 Mängder 3 Medlemsfunktioner 5 Operationer 6 Fuzzification 8 Litteraturförteckning 9

1 Funktioner och procedurell abstraktion

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Grundläggande logik och modellteori (5DV102)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

Programmering och Programspråk. 7,5 högskolepoäng. Namn: (Ifylles av student) Personnummer: (Ifylles av student)

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Föreläsning 5 i programmeringsparadigm.

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Föreläsning 3-4 Innehåll

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Enjoy Vattenfallsmodellen i funktionella språk

TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Texten är en omarbetning av en text skriven av Rikard Bögvad för kursen Matematik I (30 hp).

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

FL 5: Aritmetik. Teori

Objektorienterad programmering Föreläsning 5

Laboration 1: Figurer i hierarki

TATA42: Föreläsning 7 Differentialekvationer av första ordningen och integralekvationer

Transkript:

Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1). Repetition: I Haskell är mönster-passning (pattern-matchning) jättepraktiskt: När vi gör ett anrop av en funktion med ett visst argument mönster-passas argumentet mot olika mönster i funktionens definitioner : Ex Vi vill räkna ut f (Sq 6 7)(Chess ((Sq 2 3, NoChessman): [])) där f :: Square -> Chess -> Bool f _ (Chess [] ) = False f sq (Chess ((sq1, ch1):sqcms)) = sq == sq1 f sq (Chess sqcms) Första ekvationens vänsterled matchar inte; men den andra går bra och följande bindningar görs: f (Sq 6 7)(Chess ((Sq 2 3, NoChessman): [] )) -- argumentet f sq (Chess ((sq1, ch1) : sqcms)) -- vänsterledet sq binds till (Sq 6 7) sq1 binds till Sq 2 3 ch1 binds till NoChessman sqcms binds till [] Dessa bindningar används sedan i högerledet (utom ch1 varför man skulle kunna använda _ i stället i mönstret). Bindningarna görs till namnen (identifierarna) sq, sq1, ch1, sqcms. Namnen finns i mönstren i funktiondefinitionerna och namnen måste inledas med en gemen (liten bokstav). Konstruerarna skall stämma exakt, i vårt fall Chess, : (,) (Konstruerarna med namn har versal initial, börjar med stora bokstäver). Matchningen är "en-vägs", eftersom de namn som binds bara finns "på ena sidan", i mönstren i funkttionsdefinitonerna. Prolog : I Prolog kan bindningar (substitioner) göras till logiska variabler, med versal initial, medan värden (t ex atomer) har gemen intial. M a o är det tvärtom när det gäller gemener och versaler. Brna kallar matchning för unifiering. (Vissa författare skiljer på unifiering och matchning, den förenklade form av unifiering som används i Prolog av effektivitetsskäl). Unifieringen i Prolog är "två-vägs", eftersom logiska variabler kan finnas "på båda sidorna", både i det mål som Prolog försöker satisfiera och predikathuvuena (vänsterleden) i predikatens definitioner (de olika klausulerna) i databasen. I Prolog är unifiering det kanske allra viktigaste mekanismen för språkets funktion. Om unifieringen lyckas försöker Prolog använda klausulen, dvs satisfiera målen i klausulens kropp om en sådan finns. I prolog är unifiering fundamentalt för språkets semantik. Unifiering används för övrigt också i Haskell för att klura ut typer och kontrollera typer. Unifiering beskrevs första gången i detalj 1964 i en "landmark thesis" av Robinson. Unifiering är en mycket viktig teoretisk grundval för de båda deklarativa paradigmen (= logik- och funktionella paradigmen).

Byrd Box - modellen (Sökningarna i Brna Chapter 3 beskrivna med en variant av Box-modellen i Brna Chapter 5). En Byrd Box är ett grafiskt sätt att rita procedur-synen på ett predikat. Tre olika exempel : eller a(x):- b(x), och a/1 c(x). a(x) :- b(x), c(x). Procedurell läsnig: Proceduren Procedurell läsnig: Proceduren (med portar) a(x) : försök b(x) sedan ev. e(x) Logisk läsnig: Predikatet Logisk läsnig: Predikat med aritet (ställighet) 1 med med 1 klausuler, en regel 4 klausuler, alla faktum. med två konjugerade submål Exempel Byrd Box model förfrågan happy(p): e(x):- e(x):- e/1 g(x). h(x). eller e(x) :- g(x). e(x) :- h(x). Procedurell läsnig: Proceduren a(x) : försök b(x) eller e(x) Logisk läsnig: Predikat med 2 klausuler, 2 regler med varsitt submål, disjunkta. Byrd Box model för frågan happy(p) Program Database wise(jean). happy(p) :- happy(p) :- wealthy(p), happy(p) :- wise(p), e l l e r n y s a t s wealthy(p), wise(p), wise(jean). och,

En "körning" av Prolog kan spåras med trace och illustreras i Box-modellen. Genom att göra trace i Sixstus skriver Sixstus ut vad som händer på ett sätt som underlättar förståelsen av förloppet i Box-modellen. Två enkla körningar av ett predikat med fyra fakta illustrerade i Box-modellen: (streckade pilar skrivs ej ut av Sicstus)?- trace. {The debugger will first creep -- showing everything (trace)}?- 1 1 : woman(jean)? 1 1 : woman(jean)??- 1 1 : woman(joan)? 1 1 : woman(joan)? woman(jean) woman(joan) Dessa två körningar fungerar som motsvarande körning av denna Haskell-funktion woman :: Atom -> Bool -- Ett anrop motsvarar -porten woman Jean = True -- Resultatet True woman Jane = True -- motsvarar -porten woman Joan = True woman Pat = True woman _ = False -- False motsvarar -porten, no. Vi får svaret istället för True. I Prolog skall parametern/argument omges med (). I Prolog lämnar vi proceduren med -porten. Eftersom vi fått svar på vår fråga skriver Prolog. Körningar av ett predikat med fyra fakta som misslyckas:?- woman(eve). 1 1 : woman(eve)? 1 1 : woman(eve)? no Motsvarande Haskell-funktion skulle returnera False. I Prolog lämnar vi proceduren med -porten. Eftersom vi fått svar på vår fråga skriver Prolog no.

Körningar av ett predikat med fyra fakta. Frågan innehåller en logisk variabel. Prolog föreslår en substitution för att frågan skall kunna besvaras jakande. Vi är nöjda med Prologs första förslag till substitution:?- woman(w). 1 1 : woman(_206)?? 1 1 : woman(jean)? W = jean??- woman(w) W = jean? I körningen mönsterpassar ("matchar", unifierar) vi anropet woman(w), dvs ett anrop med en logisk variabel W, med ett "mönster med "ett värde" Sådan "baklänges" matchning gjorde vi aldrig i Haskell, men Prolog gör det och föreslår substitutionen W = jean?. Vi är nöjda ( bara vagnretur efer W = jean? ) så svarar sedan Prolog. Körning av ett predikat med fyra fakta. Frågan innehåller en logisk variabel. Vi vill ha flera förslag. Prolog föreslår en substitution för att frågan skall kunna besvaras jakande. Vi är dock ej nöjda med Prologs två första förslag till substitutioner, vilket vi visar genom att ge ; i stället för att ge vagnretur.?- woman(w). 1 1 : woman(_206)?? 1 1 : woman(jean)? W = jean? ; 1 1 : woman(jean)?? 1 1 : woman(jane)? W = jane? ; 1 1 : woman(jane)?? 1 1 : woman(joan)? W = joan? woman(w) W = jean?; W = jane?; W = joan?- I körningen tvingar vi Prolog att pröva ytterligare två gånger. Att Prologprocedurer kan "försöka igen med nästa klausul" illustreras med att vi använder -porten. Skulle vi inte vara nöjda med något förslag så svarar till slut Prolog no, dvs Prolog kan inte finna några ytterligare förslag till substitution av den logiska variablen som gör frågan sann.

Lyckad körning av ett predikat med regel: happy(jean) Byrd Box model för frågan happy(jean)?- happy(jean). 1 1 : happy(jean)? 2 2 : healthy(jean)? 2 2 : healthy(jean)? 3 2 : woman(jean)? 3 2 : woman(jean)?? 1 1 : happy(jean)? wealthy(p) avkortad bild Missyckad körning av ett predikat med regel: Byrd Box model för frågan happy(pat)?- happy(pat). 1 1 : happy(pat)? 2 2 : healthy(pat)? 2 2 : healthy(pat)? 3 2 : wealthy(pat)? 3 2 : wealthy(pat)? 4 2 : wise(pat)? 4 2 : wise(pat)? 1 1 : happy(pat)? no?- happy(pat) wealthy(p), wise(p), wise(jean)

Två körningar av ett predikat definierat med en regel. Frågor med logisk variabel : happy(p) Byrd Box model för frågan happy(p)?- happy(p). 1 1 : happy(_206)? 2 2 : healthy(_206)?? 2 2 : healthy(jim)? 3 2 : woman(jim)? 3 2 : woman(jim)? 2 2 : healthy(jim)?? 2 2 : healthy(jane)? 4 2 : woman(jane)? 4 2 : woman(jane)?? 1 1 : happy(jane)? P = jane? - - wealthy(p), - wise(p), wise(jean)?- happy(r). 1 1 : happy(_206)? 2 2 : healthy(_206)?... som ovan? 1 1 : happy(jane)? R = jane? ; 1 1 : happy(jane)? 2 2 : healthy(jane)? 2 2 : healthy(jean)? 5 2 : woman(jean)? 5 2 : woman(jean)?? 1 1 : happy(jean)? R = jane? happy(r) R = jean? ; 1 1 : happy(jean)? 6 2 : wealthy(_206)?? 6 2 : wealthy(jane)? 7 2 : woman(jane)? 7 2 : woman(jane)?? 1 1 : happy(jane)? Byrd Box model för frågan wealthy(p), wise(p), wise(jean) happy(p)

Prologs semantik (i procedurell syn) beskriven med Byrds boxmodell: 1. Anrop av procedure: Vi kommer in genom -porten (fungerar ungefär som vanliga programspråk): Vi finner ett faktum som unifierar. Vi finner ej någon klausul (regel eller faktum) med huvud som unifierar.... Vi finner en regel med huvud som unifierar. Vi gör ett anrop () på första delmål (subgoal) i koppen. 2. Förnyat försök att satisfiera en procedure: Vi kommer in genom -porten: Vi lämnade proceduren via ett faktum Vi finner ett nytt faktum som unifierar. (Vi kommer ihåg vilka vi redan testat) Vi lämnade proceduren via ett fakum Vi finner ej något ytterligarefaktum eller regel som unifierar. (Vi kommer ihåg vilka vi redan testat) Vi lämnade proceduren via ett fakum Vi finner en ny regel med huvud som unifierar. (Vi kommer ihåg regler/fakta vilka vi redan testat) Vi lämnade proceduren via en regel. 3. Kopplingar. Vi kommer ut genom -portar eller -portar : ( från frågan ger no)... =.... =..? Inga logiska Logiska variabler variabler i frågan. Förslag i frågan till substitution. Vi är nöjda. från procduren som är frågan.. =.... =..?; Logiska variabler i frågan. Förslag till substitution. Vi är ej nöjda.

talksabout(a, B) talksabout(a, B) Rekursion (Exemplet i Brna Chapter 4.2). talksabout(a, B):-. talksabout(a, B):- knows(a, C), talksabout(c,b). knows(bill, jane). knows(jane, pat). knows(jane, fred). knows(fred, bill). % Faktum. Ex på till-slut-på-raden-kommentar /* Körning?- talksabout(x, Y). Y = jane? ; X = jane, Y = pat? ; X = jane, Y = fred? ; X = fred, Y = bill? ; talksabout(a, B) talksabout(a, B) Y = pat? ; talksabout(a, B) Y = fred? ; Y = bill? ; Y = jane? ; Y = pat? ; */.