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



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

INF3110 Programmeringsspråk

FOL: syntaks og representasjon. 15. og 16. forelesning

TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz

Øvingsforelesning 1 Python (TDT4110)

UNIVERSITETET I OSLO

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

MAT1030 Plenumsregning 3

INF Algoritmer og datastrukturer

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Stack. En enkel, lineær datastruktur

INF Algoritmer og datastrukturer

Norsk informatikkolympiade runde

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

INF Algoritmer og datastrukturer

Oppgaver Prolog. Bok. Kapittel 11. Oppgave Definer relasjoner

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

INF1010 Binære søketrær ++

2 Om statiske variable/konstanter og statiske metoder.

Hjemmeeksamen 1 i INF3110/4110

INF Algoritmer og datastrukturer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Del 4 Noen spesielle C-elementer

Kap.4 Funksjoner. Tre viktig ting ifm. funksjoner: parameter (input) oppskrift (body) for å beregne resultat (output)

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Norsk informatikkolympiade runde

Turingmaskiner.

PG4200 Algoritmer og datastrukturer Forelesning 7

UNIVERSITETET I OSLO

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Norsk informatikkolympiade runde

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

Eksamen i SLI 5 høsten 1993

INF4170 Logikk. Forelesning 12: Automatisk bevissøk IV matriser og koblingskalkyle. Bjarne Holen. Institutt for informatikk, Universitetet i Oslo

Kap. 4: Ovenfra-ned (top-down) parsering

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

Søking i strenger. Prefiks-søking Naiv algoritme Knuth-Morris-Pratt-algoritmen Suffiks-søking Boyer-Moore-algoritmen Hash-basert Karp-Rabin-algoritmen

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

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

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Notater til INF2220 Eksamen

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk

UNIVERSITETET I OSLO

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream

INF2810: Funksjonell Programmering. Mer om strømmer

UNIVERSITETET I OSLO

INF2080 Logikk og beregninger

Kap.4 del 2 Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Alle hele tall g > 1 kan være grunntall i et tallsystem.

Datatyper og typesjekking

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

Datatyper og typesjekking

Binære trær: Noen algoritmer og anvendelser

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

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

INF1010 siste begreper før oblig 2

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

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

INF2810: Funksjonell Programmering. Mer om strømmer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF1800 LOGIKK OG BEREGNBARHET

UNIVERSITETET I OSLO

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

INF3170 / INF4171. Intuisjonistisk logikk: Kripke-modeller, sunnhet, kompletthet. Andreas Nakkerud. 15. september 2015

Introduksjon til objektorientert programmering

MAT1030 Diskret matematikk

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Datatyper og typesjekking

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Algoritmer og Datastrukturer

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

København 20 Stockholm

MAT1030 Forelesning 2

INF våren 2017

INF 2820 V2016: Obligatorisk innleveringsoppgave 3

Transkript:

1 Logisk Programmering Relasjoner vz. funksjoner Funksjon: inn og ut, en verdi Relasjon: ingen retning, null eller flere verdier LP slagord: algoritme = logikk + kontroll Logikk ( hva ): logisk program Kontroll ( hvordan ): innebygd i tolkeren

2 Horn klausuler Logisk program: liste Horn klausuler Horn klausul: spesiell logisk setning x. P 1 P n C for alle x: C hvis P 1 og... og P n operasjonelt: beregn C gjennom beregning av P 1,..., P n Kan være betinget (n > 0) eller ubetinget (n = 0) Query (spørsmål): x. P 1 P n

3 Fakta, regler og spørsmål Horn klausuler i LP: c :- p1,...,pn. Logiske atomer c,p1,...,pn kan inneholde variabler Faktum (ubetinget), eksempel: foreleser(bezem,inf121). Regel (betinget), eksempel: eksaminator(x,y) :- foreleser(x,y). Spørsmål, eksempel:?- eksaminator(x,inf121). Predikater, variabler og konstanter

4 Lister i Prolog Ikke head : tail men [head tail] Samme [] Notasjon [1,2,3] som i ML I tillegg [1,2 Rest] for 1:2:Rest Prolog er utypet: [1,2, abc ] er OK

5 LP anvendelser Søkealgoritmer Kunstig intelligens Språkteknologi (parsing og oversetting) Spørrespråk for relasjonelle databaser (Datalog) Prototyping

6 Relasjoner Relasjon R formelt: R D n n-tupler: (d 1,..., d n ) D n Eksempel: {(ams, bgo), (ams, bcn), (bgo, osl), (osl, ams), (osl, cph), (bcn, cph)} Eksempel: {(0, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 2),...} Eksempel: {([], [], []), ([a], [], [a]), ([], [a], [a]), ([a], [b], [a, b]),...} Hvordan spesifiseres relasjoner? (endelig/uendelig)

7 Relasjoner, spesifikasjon Direkte flyforbindelser: opplisting av fakta Addisjon: beregning av sum Konkatenering av lister (append): logisk program: append([],l,l). append([h T],L,[H TogL]) :- append(t,l,togl).

8 Eksempler på spørsmål (svar fra Prolog) append([a,b],[c],[a,b,c]). append([a,b],[c],l). append([a,b],l,[a,b,c]). append([a,b],[d],[a,b,c]). append([a,b],[d],[a,b,c]). append(l1,l2,[a,b,c]). append(l,[b,c],[a,b,c]). append(l,[b],[a,b,c]).

9 Prolog-syntaks Som i predikatlogikk, med noe særpreg Atom (språkatom): begynner med liten bokstav eller Enkel term: tall, variabel (begynner med stor bokstav), atom, eksempler: -1, 1.23E4, Liste, X, inf121, p, f Term (= sammensatt term), BNF syntaks: <term> ::= <enkel_term> <atom>(<terms>) <terms> ::= <term> <terms>,<term> <fact> ::= <term>. <rule> ::= <term> :- <terms>. <query> ::= <terms>. Obs: språkatomer versus predikatlogiske atomer

10 Eksempler Faktum: foreleser(bezem,inf121). Regel: eksaminator(x,y) :- foreleser(x,y). Spørsmål: eksaminator(x,inf121),foreleser(x,inf170). Øvelse: gi grammatiske avledniger Laste program: consult( Prosjekter/Prolog/flyforbindelser ). Liste program: listing.

11 Prolog program append([],l,l). append([h T],L,[H TogL]) :- append(t,l,togl). prefix(x,z) :- append(x,_,z). %% obs: _ suffix(y,z) :- append(_,y,z). %% obs: _ infix(y,z) :- prefix(x,z), suffix(y,x). %% obs: X % eksempel query: infix(l,[a,b,c])

12 Flyforbindelser direkte(bgo,ams). direkte(ams,bcn). direkte(bgo,osl). direkte(osl,ams). direkte(osl,cph). direkte(cph,bcn). forbindelse(x,x). forbindelse(x,z):- direkte(x,y),forbindelse(y,z).

13 Queries Er det en direkte flyforbindelse fra Bergen til Barcelona? Er det en flyforbindelse fra Bergen til Barcelona? Er det en flere flyforbindelser fra Bergen til Barcelona? Til hvilke byer kan vi fly fra Bergen? Fra hvilke byer kan vi fly til Amsterdam? Er det en flyforbindelse fra Bergen til Fantoft?

14 Viktige begrep Unifikasjon, = er syntaktisk likhet Eksempel: f(a,x)=f(y,b), 2=1+1 Dypde-først søk (depth-first search) Negasjon-ved-å-feile (negation as failure) Aritmetikk i Prolog: is Eksempel: X is 1+1, Y is Z+1

15 Kap. 3 Datastrukturer i Prolog Lister: [Head Tail] =.(Head,Tail) Eksempel:.(a,.(b,.(c,[]))) member i ML og i Prolog: % member _ [] = False % member e (h:t) = e==t member e t member(elt,[elt _]). member(elt,[_ Tail]):- member(elt,tail). LP: det positive eksplisitt, det negative ved å feile LP: member(b,[a,b,c,b]) lykkes to ganger!

16 Termer som datastrukturer Eksempel: binære søketrær Betingelse i hver node: tallene i deltreet til venstre skal være mindre enn tallet i selve noden, som i sin tur skal være mindre enn tallene i deltreet til høyre Eksempel: node(2,node(1,e,e),node(3,e,e)) Søk-algoritme: % jf. type Btree = Loev Node Int Btree Btree tmember(key,node(key,_,_)). %% obs: _ tmember(key,node(n,left,_)):- Key < N, tmember(key,left). tmember(key,node(n,_,right)):- Key > N, tmember(key,right).

17 Programmeringsteknikker Akkumulatorer Halerekursjon (tail recursion) Gjett og verifiser (guess and verify) Forskjellslister (difference lists) Åpne datastrukturer

18 Akkumulatorer Lengde i unær representasjon length([],0). length([_ Tail],N+1):- length(tail,n). Lengde i normal representasjon length([],0). length([_ Tail],Nplus1):- length(tail,n), Nplus1 is N+1. Ikke hale-rekursivt!

19 Tail recursion Lengde i normal representasjon, hale-rekursivt! length([],out,out). length([_ Tail],Accu,Out):- New is Accu+1, length(tail,new,out). length(l,n):- length(l,0,n). Obs: length/2 og length/3 Annet eksempel: snu en liste rev([],out,out). rev([h Tail],Accu,Out):- rev(tail,[h Accu],Out). rev(l,lrev):- rev(l,[],lrev). Obs: rev/2 og rev/3

20 Guess and verify Kalles også: generate and test Problemstilling: finn i en gitt mengde, et element som... Eksempel: overlapp mellom to lister Løsning: overlap(l1,l2):- member(e,l1),member(e,l2). deklarativt: det finnes et felles element i L1,L2 operasjonelt: generer alle E i L1, sjekk om E i L2 Pragmatikk: mengden skal være endelig, ellers skal du vite at det finnes et element som har egenskapen man ønsker

21 Difference lists Problemstilling: for treg konkatenering av lister IP løsning ifm. dynamiske lister: peker til siste element IP eksempel på tavla LP løsning: forskell-lister Representasjon, eksempel: dl([a,b,c X],X) Konkatenering: concat(dl(x,y),dl(y,z),dl(x,z)). (!) Eksempel: concat(dl([a,b L],L),dl([c M],M),dl(P,Q)).

22 Åpne datastrukturer Endemarkører ( endmarkers ): f.eks. [], Loev 1 Åpne datastrukturer: variabler som endmarkers Eksempel: [a,b,c []] vs. [a,b,c X] Variabelen gir tilgang til siste element Prolog variabel: peker til en datastruktur Kan utvides på konstant tid

23 Boblesortering i Prolog b([max],[],max). b([h1,h2 T],[H2 L],X) :- H1 >H2, b([h1 T],L,X). b([h1,h2 T],[H1 L],X) :- H1=<H2, b([h2 T],L,X). bs([],l,l). bs([h T],L,O) :- b([h T],Lred,Max), bs(lred,[max L],O). :- bs([12,-1,10,100,-3,0,0,-100,8,4,2,6,1],[],o).