LOGISK PROGRAMMERING. Prolog (kapittel 8): Fakta Regler Spørsmål Variable Hvordan finne svar? Unifikasjon Lister

Like dokumenter
Logisk programmering INF 3110/ /12/2004 1

Logisk programmering. Grunnleggende idé. Bruksområder. Prolog. Prolog

Prolog syntaks (utdrag) Prolog litt repetisjon. Fjerne elementer i lister unngå falske løsninger. Syntaks for termer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

UNIVERSITETET I OSLO

Øvingsforelesning 1 Python (TDT4110)

Logisk Programmering. Relasjoner vz. funksjoner. Funksjon: inn og ut, en verdi. Relasjon: ingen retning, null eller flere verdier


Obligatorisk oppgave 1 INF1020 h2005

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Forelesning 27. MAT1030 Diskret Matematikk. Bevistrær. Bevistrær. Forelesning 27: Trær. Roger Antonsen. 6. mai 2009 (Sist oppdatert: :28)

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

INF1000 : Forelesning 4

Om plotting. Knut Mørken. 31. oktober 2003

Scanning - I Kap. 2. Hva scanneren gjør

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

MAT1030 Diskret matematikk

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

MAT1030 Diskret Matematikk

Binære trær: Noen algoritmer og anvendelser

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Live life and be merry

Et eksempel: Åtterspillet

INF1010 Rekursjon. Marit Nybakken 1. mars 2004

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

IN 147 Program og maskinvare

Dagens tema. Mer MIPS maskinkode. Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Norsk informatikkolympiade runde

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Skanning del I INF /01/15 1

MAT1030 Forelesning 11

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

KONTINUASJONSEKSAMEN

Hvordan løse problemer med programmering?

Live life and be merry

MAT1030 Diskret Matematikk

Kapittel 5: Relasjoner

En repetisjon hrj høst 2009

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

Python: Strenger 3. utgave: Kapittel 8

PG4200 Algoritmer og datastrukturer Forelesning 7

Øvingsforelesning 5 Python (TDT4110)

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Skanning del I. Kapittel 2 INF 3110/ INF

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Obligatorisk Innlevering 2

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Verktøy for boligkartlegging

Programmeringsspråket C

Eksamen i SLI 5 høsten 1993

Verktøy for boligkartlegging

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

Litt enkel matematikk for SOS3003. Om matematikk. Litt om kva vi treng. Erling Berge

INF2220: Forelesning 2

Øvingsforelesning 5 Python (TDT4110)

Løsningsforslag. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Norsk informatikkolympiade runde

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

Kapittel 1 En oversikt over C-språket

1/28. Forelesning Forelesning / fun f (_,0) = true. 2 f(0,_)=true. 3 f_ =false; 4 val f = fn : int * int -> bool

Norsk informatikkolympiade runde

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

9. ASP med databasekopling, del II

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Kapittel 5: Relasjoner

Forelesning 11. Relasjoner. Dag Normann februar Oppsummering. Relasjoner. Relasjoner. Relasjoner

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

UNIVERSITETET I OSLO

INF2220: Forelesning 2

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

Formål: Velge hva som skal kopieres, formel/verdi/format/etc Metode: Kopier som vanlig, lim inn utvalg

EKSAMEN med løsningsforslag

Semantisk Analyse del I

UNIVERSITETET I OSLO

Blokker og metoder INF1000 (Uke 6) Metoder

INF120: Oblig 3. Yngve Mardal Moe

Del 1 En oversikt over C-programmering

Læringsmål og pensum. Oversikt

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

ITGK - H2010, Matlab. Repetisjon

Øvingsforelesning i Matlab TDT4105

Oppsummering. MAT1030 Diskret matematikk. Relasjoner. Relasjoner. Forelesning 11: Relasjoner

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Transkript:

LOGISK PROGRAMMERING Prolog (kapittel 8): Fakta Regler Spørsmål Variable Hvordan finne svar? Unifikasjon Lister Hoved-prinsipp: Hva istedenfor Hvordan! 1/16 Forelesning 13 18.11.2003

Logisk programmering Programmerer ved å lage en (formell) verden som vi undersøker. To faser: 1. Beskrive den formelle verden. 2. Stille spørsmål om den som maskinen svarer på. I Prolog snakker vi om: Fakta: Basale sannheter ( database ). Regler: Hvordan splitte et problem i delproblemer. Spørsmål: Prolog skal svare ved å bruke reglene og fakta. Forelesning 13 18.11.2003 2/16

Interaktiv kjøring 1 > sicstus --- starter sicstus prolog 2?-[filnavn]. --- innlesning fra fil 3 4 yes 5?-<spørsmål>. 6 7... 8?-halt. --- avslutt Tips: Fakta og regler bør legges på en fil. Suffikset.pl er default. Mer info på sicstusintro.txt Forelesning 13 18.11.2003 3/16

Prolog Eksempel: Familie-forhold. Fakta Vi lar person(a, b, c, d) angi en person med navn a, medbsom mor, c som far og d som fødselsår. 1 person(anne, aase, aale, 1960). 2 person(knut, aase, aamund, 1965). 3 person(lars, aase, aale, 1962). 4 person(beate, anne, arne, 1989). Vi har altså: Konstanter: ord som starter med liten bokstav, samt tall Relasjoner: ord som starter med liten bokstav Spørsmål 1?-person(anne, aase, aale, 1960). 2 3 yes 4?-person(anne, aase, aale, 1962). 5 6 no Forelesning 13 18.11.2003 4/16

Spørsmål med variable Variable: ord som starter med stor bokstav. Bruk av variable i spørsmål: Leter gjennom kunnskapsbasen til det er noe som passer ved innsetting for variablene. Som svar returneres det som blir satt inn. 1?-person(anne, aase, aale, Aar). 2 3 Aar = 1960? ; 4 5 no 6?-person(Barn, aase, aale, Aar). 7 8 Barn = anne, 9 Aar = 1960? ; 10 11 Barn = lars, 12 Aar = 1962? ; 13 14 no Forelesning 13 18.11.2003 5/16

Regler barn(x, Y) skal bety at X er barn av Y: 1 barn(x,y) :- person(x,y,z,u). 2 barn(x,y) :- person(x,z,y,u). Vi kan så stille spørsmål som involverer barn-relasjonen: 1?-barn(lars,aale). 2 3 yes 4?-barn(lars,Forelder). 5 6 Forelder = aase? ; 7 8 Forelder = aale? ; 9 10 no Hvordan kommer systemet frem til disse svarene? Forelesning 13 18.11.2003 6/16

Å finne svar på spørsmål?- barn(lars,aale). For relasjonen barn har vi to mulige regler å bruke: 1. person(lars,aale,z,u). Passer ikke med noe fakta. 2. person(lars,z,aale,u). Passer med fakta person(lars,aase,aale,1962).?- barn(lars,forelder). To muligheter: 1. person(lars,forelder,z,u). Passer med person(lars,aase,aale,1962), det vil si Forelder = aase. 2. person(lars,z,forelder,u). Passer med person(lars,aase,aale,1962), det vil si Forelder = aale. Vi har altså to løsninger her. Forelesning 13 18.11.2003 7/16

Regler med flere betingelser sosken(x, Y) skal angi at X og Y er søsken: 1 sosken(x,y) :- barn(x,z), barn(y,z), X \== Y. Komma separerer betingelser som alle må være oppfylt. Betingelsen X \== Y angir at X og Y må være tekstlig ulike. Dette kravet gjør at sosken(anne, anne) gir no. 1?-sosken(anne,X). 2 3 X = knut? ; 4 5 X = lars? ; 6 7 X = lars? ; 8 9 no Hvorfor får vi lars til svar to ganger? Forelesning 13 18.11.2003 8/16

Vi kan konstruere et søketre ut fra spørsmålet sosken(anne, X): sosken(anne,x) barn(anne,z), barn(x,z), p(anne,z,y,u), barn(x,z), p(anne,y,z,u), barn(x,z), p(anne,aase,aale,1960), barn(x,aase), p(anne,aase,aale,1960), barn(x,aale), p(x,aase,v,w), p(x,v,aase,w), p(x,aale,v,w), p(x,v,aale,w), p(anne,aase,aale,1960), anne \== anne p(knut,aase,aamund,1965), anne \== knut p(lars,aase,aale,1962), anne \== lars no no p(anne,aase,aale,w), anne \== anne p(lars,aase,aale,1962), lars \== anne no yes (X = knut) yes (X = lars) no yes (X = lars) Prolog søker dybde først, venstre mot høyre. Forelesning 13 18.11.2003 9/16

Flere regler esosken(x, Y) angir at X og Y er ekte søsken. halvsosken(x, Y) angir at X og Y er halvsøsken. 1 esosken(x,y) :- barn(x,forelder1), 2 barn(y,forelder1), 3 X\==Y, 4 barn(x,forelder2), 5 barn(y,forelder2), 6 Forelder1 \== Forelder2. 7 8 halvsosken(x,y) :- barn(x,forelder), 9 barn(y,forelder), 10 X\==Y, 11 barn(x,forelder1), 12 barn(y,forelder2), 13 Forelder \== Forelder1, 14 Forelder \== Forelder2, 15 Forelder1 \== Forelder2. Forelesning 13 18.11.2003 10/16

Avskjæring (cut) 1 esosken(x,y) :- barn(x,forelder1), 2!, 3 barn(y,forelder1), 4 X\==Y, 5 barn(x,forelder2), 6 barn(y,forelder2), 7 Forelder1 \== Forelder2. Tegnet! angir cut : Backtraking over! er ulovlig. Dette gir bedre effektivitet, og kan brukes til å unngå repetisjon av samme løsning. Hva skjer ved esosken(anne, X) og esosken(x, anne) nå? Forelesning 13 18.11.2003 11/16

Rekursive regler etterkommer(x, Y) skal angi at X er etterkommer til Y: 1 etterkommer(x,y) :- barn(x,y). 2 etterkommer(x,y) :- barn(x,z), etterkommer(z,y). Pass på rekkefølgen: Ikke-rekursiv regel først! Rekursivt delmål til slutt! 1?-etterkommer(anne, X). 2 3 X = aase? ; 4 5 X = aale? ; 6 7 no 8?-etterkommer(X, aase). 9 10 X = anne? ; 11 12 X = knut? ; 13 14 X = lars? ; 15 16 X = beate? ; 17 18 no Forelesning 13 18.11.2003 12/16

Unifikasjon Prosessen med å matche (del-)spørsmål med fakta/regler kalles unifikasjon. For at vi skal få en match må vi ha: samme relasjon ytterst samme antall argumenter for hvert argument: 1. begge er konstater: ok hvis samme konstant 2. en (ubundet) variabel X og en konstant c: X må bindes til c. 3. to variable X og Y: Y erstattes med X Eksempel: Spørsmål: etterkommer(anne, Y) Fakta: etterkommer(x, X). Unifikasjon: X := anne og Y := anne Ved unifikasjon tilpasses variable, både i arbeidsuttrykk og fakta/regel! Forelesning 13 18.11.2003 13/16

Unifikasjons-operatorer = unifiserbart like == syntaktisk like =:= verdi-like Eksempler: 1 + 1 = 2 gir no 1 + 1 == 2 gir no 1 + 1 =:= 2 gir yes X=1 girx=1 X == x gir no Negasjon Operatoren not: yes blir til no no blir til yes 1?-not sosken(anne,x). 2 3 no 4?-not sosken(anne,aase). 5 6 yes Forelesning 13 18.11.2003 14/16

Lister i Prolog Eksempler: [] - den tomme listen [a,b,c] - en liste med tre elementer [a [b,c]] - samme som [a,b,c] Generelt: [X Y] er en liste med X som første element og Y som rest-liste. Funksjoner Prolog har ikke funksjoner! Funksjonen f : A B kan erstattes med relasjonen er f (a, b) slik at er f (a, b) svarer til f (a) =b. Liste-eksempler: 1 lengde([],0). 2 lengde([x Y],N) :- lengde(y,m), N ism+1. Isettsammen(Liste1, Liste2, Liste3) fås Liste3 ved å sette sammen Liste1 og Liste2. 1 settsammen([],x,x). 2 settsammen([x Y],Z,[X U]) :- settsammen(y,z,u). Her kan vi tenke på Liste1 og Liste2 som inn-parametre, og Liste3 som ut-parameter. Forelesning 13 18.11.2003 15/16

Avsluttende eksempel: tabell Fakta t(i, X) angir at verdien X ligger på indeks I i tabellen t: 1 t(1,a). 2 t(2,b). 3 t(3,c). 4 t(4,d). 5 t(5,e). Regel has(x) sier om det finnes en I slik at t(i, X). 1 has(x) :- t(i,x). Spørsmål 1?-has(c). % er c med i tabellen? 2 3 yes 4?-t(I,b). % Hva er indeksen til b? 5 6 I=2; 7 8 no 9?-t(2,X). % Hva ligger på plass 2? 10 11 X=b; 12 13 no Forelesning 13 18.11.2003 16/16