Logisch Programmeren/Prolog 2006-7



Vergelijkbare documenten
Logisch Programmeren/Prolog

Modelleren en Programmeren: Prolog

Modelleren en programmeren. Week 9: werken met incomplete datastructuren

8.1 Herleiden [1] Herleiden bij vermenigvuldigen: -5 3a 6b 8c = -720abc 1) Vermenigvuldigen cijfers (let op teken) 2) Letters op alfabetische volgorde

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

V.2 Limieten van functies

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie 9 mei 2008

Logica voor Informatica. Logica Toepassingen. PROLOG: Logische Programmeertaal. Mehdi Dastani

I.3 Functies. I.3.2 Voorbeeld. De afbeeldingen f: R R, x x 2 en g: R R, x x 2 zijn dus gelijk, ook al zijn ze gegeven door verschillende formules.

Semantiek 1 college 10. Jan Koster

Meetkundige Ongelijkheden Groep 2

8.1 Herleiden [1] Herleiden bij vermenigvuldigen: -5 3a 6b 8c = -720abc 1) Vermenigvuldigen cijfers (let op teken) 2) Letters op alfabetische volgorde

1 Coördinaten in het vlak

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Meetkundige ongelijkheden Groep A

inhoudsopgave juni 2005 handleiding haakjes 2

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Dossier 4 VECTOREN. Dr. Luc Gheysens. bouwstenen van de lineaire algebra

Een bekende eigenschap van de middens van de zijden van een driehoek is de volgende.

Meetkunde. Trainingsweekend januari Gerichte hoeken. gerichte hoeken, driehoeksongelijkheid, Ravi

Permutaties Combinaties Binomiaalcoëfficiënt Variaties. Combinatoriek. W. Oele. 27 januari W. Oele Combinatoriek

Zomercursus Wiskunde. Katholieke Universiteit Leuven Groep Wetenschap & Technologie. September 2008

1 Introductie. 2 Oppervlakteformules

Logic for Computer Science

Opgaven Kangoeroe vrijdag 17 maart 2000

Noordhoff Uitgevers bv

Ter Leering ende Vermaeck

Inleiding Programmeren 2

Matrixalgebra (het rekenen met matrices)

Antwoordmodel - Vlakke figuren

Noordhoff Uitgevers bv

2WO12: Optimalisering in Netwerken

Uitwerkingen Rekenen met cijfers en letters

Analytische Meetkunde

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

Pascal en de negenpuntskegelsnede

Inhoudsopgave. Relaties geordend paar, cartesisch product, binaire relatie, inverse, functie, domein, bereik, karakteristieke functies

Zomercursus Wiskunde. Module 1 Algebraïsch rekenen (versie 22 augustus 2011)

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

We beginnen met de eigenschappen van de gehele getallen.

Dan is de afstand A B = lengte van lijnstuk [A B]: AB = x x )² + ( y ²

De wissel-eigenschap voor vermenigvuldigen Vermenigvuldigen kan in omgekeerde volgorde gebeuren, want voor ieder paar getallen a enbgeldt: a b=b a.

VERZAMELINGEN EN AFBEELDINGEN

Examen Datastructuren en Algoritmen II

Wat is de som van de getallen binnen een cirkel? Geef alle mogelijke sommen!

Hoofdstuk 1. Inleiding. Lichamen

Opgaven Kangoeroe vrijdag 17 maart 2000

Automaten. Informatica, UvA. Yde Venema

Discrete Wiskunde, College 7. Han Hoogeveen, Utrecht University

Driehoeken. Enkele speciale topics. Arne Smeets. Trainingsweekend Februari 2008

Zomercursus Wiskunde. Katholieke Universiteit Leuven Groep Wetenschap & Technologie. September 2008

Combinatoriek groep 1

II.3 Equivalentierelaties en quotiënten

Notatie van verzamelingen. Lidmaatschap. Opgave. Verzamelingen specificeren

(iii) Enkel deze bundel afgeven; geen bladen toevoegen, deze worden toch niet gelezen!

Mededelingen. TI1300: Redeneren en Logica. Waarheidstafels. Waarheidsfunctionele Connectieven

Verzamelingen deel 3. Derde college

III.3 Supremum en infimum

STELLINGEN & BEWIJZEN 5VWO wiskunde B 1 e versie

De Stelling van Pascal Inhoud

Modelleren en Programmeren

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

Oefenopgaven Stelling van Pythagoras.

In de 4som-puzzel kun je de gegeven sommen variëren. Nog zo eentje.

Hoofdstuk 7 : Gelijkvormige figuren

Paragraaf 8.1 : Recursieve en directe formule

Tentamen Programmeren in C (EE1400)

Eigenschap (Principe van welordening) Elke niet-lege deelverzameling V N bevat een kleinste element.

Lineaire Algebra voor ST

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II

1 Cartesische coördinaten

1 Junior Wiskunde Olympiade : eerste ronde

Enkel-, Dubbelverhouding en Harmonische Objecten

1 Vlaamse Wiskunde Olympiade : Tweede Ronde.

1 Inleiding in Functioneel Programmeren

Matrixoperaties. Definitie. Voorbeelden. Een matrix is een rechthoekig array van getallen, die kentallen of elementen heten.

Noordhoff Uitgevers bv

Paragraaf 4.1 : Gelijkvormigheid

Babel fish. Opgave. Invoer. Uitvoer

44 De stelling van Pythagoras

Hoofdstuk 1 - Eigenschappen

Deeltoets Digitale technieken

Aanvullingen bij Hoofdstuk 6

Wiskunde Opdrachten Pythagoras

CEVA-DRIEHOEKEN. Eindwerk wiskunde Heilige-Drievuldigheidscollege 6WeWIi. Soetemans Dokus

1 Vlaamse Wiskunde Olympiade : Tweede Ronde.

Reguliere Expressies

Massa punten. Hector Mommaerts

Getaltheorie groep 3: Primitieve wortels

Transcriptie:

Logisch Programmeren/Prolog 2006-7 Jori Mur Center for Language and Cognition (CLCG) Rijksuniversiteit Groningen j.mur@rug.nl

1 Overzicht generatiegenoot/2 Lijsten

2 Huiswerkopgave % % truus % / \ % griet trina % / \ % marie klara maart % % hiske sasha %

3 Huiswerkopgave moeder(hiske,marie). moeder(marie,griet). moeder(klara,griet). moeder(griet,truus). moeder(trina,truus). moeder(maart,trina). moeder(sasha,maart).

4 Huiswerkopgave Twee voor de hand liggende base cases: generatiegenoot(x,x). of generatiegenoot(x,y):- moeder(x,z), moeder(y,z).

5 Huiswerkopgave Recursieve clause in beide gevallen: generatiegenoot(x,y):- moeder(x,x1), moeder(y,y1), generatiegenoot(x1,y1).

6 Huiswerkopgave versie 1 generatiegenoot(x,x). generatiegenoot(x,y):- moeder(x,x1), moeder(y,y1), generatiegenoot(x1,y1).

7 Huiswerkopgave versie 1?- generatiegenoot(truus,y). Y = truus?- generatiegenoot(klara,y). Y = klara; Y = marie; Y = marie; Y = klara; Y = klara; Y = maart?- generatiegenoot(x,klara). Y = klara; Y = marie; Y = marie; Y = klara; Y = klara; Y = maart

8 Huiswerkopgave versie 1?- generatiegenoot(x,y). Y = X; X = hiske, Y = hiske; X = hiske, Y = hiske; X = hiske, Y = hiske; X = hiske, Y = sasha; X = enz... (27 total)

9 Huiswerkopgave versie 2 generatiegenoot(x,y):- moeder(x,z), moeder(y,z). generatiegenoot(x,y):- moeder(x,x1), moeder(y,y1), generatiegenoot(x1,y1).

10 Huiswerkopgave versie 2?- generatiegenoot(truus,y). no?- generatiegenoot(klara,y). Y = marie; Y = marie; Y = klara; Y = klara; Y = maart?- generatiegenoot(x,klara). Y = marie; Y = marie; Y = klara; Y = klara; Y = maart

11 Huiswerkopgave versie 2?- generatiegenoot(x,y). X = hiske, Y = hiske; X = hiske, Y = hiske; X = hiske, Y = hiske; X = hiske, Y = sasha; X = enz... (26 total)

12 Huiswerkopgave Alternatieve goal-volgorde: generatiegenoot(x,y):- moeder(x,z), moeder(y,z). generatiegenoot(x,y):- generatiegenoot(x1,y1), moeder(x,x1), moeder(y,y1). Slaagt wanneer verwacht, maar faalt niet. Komt in lus op bijv. generatiegenoot(sasha,marie).

13 Huiswerkopgave Dezelfde oplossing op verschillende manieren bewezen kan je voorkomen door te zorgen dat er geen overlap is tussen de cases: generatiegenoot(x,y):- moeder(x,z), moeder(y,z). generatiegenoot(x,y):- moeder(x,x1), moeder(y,y1), X1 \= Y1, generatiegenoot(x1,y1).

14 Lijsten Vorig week successorfunctie als recursieve datastructuur. s(s(s(s(0)))) s/1 willekeurig lange reeksen, en daarmee willekeurig grote getallen.

15 Lijsten we kunnen ook meerplaatsige recursieve datastrukturen maken. Bijv:./2 heeft een willekeurige term als eerste argument en een term van eigen type als tweede de 0 van s/1 heet hier [].(a,.(b,.(c,[]))) willekeurig lange lijsten van elementen. zeer veel gebruikt in Prolog-praktijk (itt successor-functie).

16 Definitie lijst lijst([]). lijst(.(_head,tail)) :- lijst(tail).

17 Speciale Notatie Lijsten zijn dermate populair in Prolog dat er een speciale notatie voor bestaat: [] voor de lege lijst, [Head Tail] ipv.(head,tail), en [a,b,c] voor de lijst met precies de elementen a,b en c..(a,.(b,.(c,[]))) == [a,b,c] == [a [b,c]] == [a,b [c]] == [a,b,c []] Een goed lees- en schrijfbare notatie, maar voor Prolog is het gewoon./2

18 Definitie in speciale notatie lijst([]). lijst([_head Tail]) :- lijst(tail).

19 Lijsten [a,b,x,d(e,f)] [a,[b,x],d(e,f)] [a,b,c,d,[]] [a,b,c,d []] bevat 4 elementen bevat 3 elementen bevat 5 elementen bevat 4 elementen [a,b,c d] [a,b,c [d]] is niet goed gedefinieerd is wel goed gedefinieerd.

20 Matching en Lijsten Met matching kan je specifieke elementen van een lijst vinden:?- [_,_,X _] = [a,b,c,d,e,f]. X = c?- [_,_,_ X] = [a,b,c,d,e,f]. X = [d,e,f]?- [_,[_,_,_ Y] _] = [a,[b,c,d,e,f]]. Y = [e,f]?- [_,_,_,_] = [a,[b,c,d,e,f]]. no

21 Member member/2 is waar als het eerste argument een element is van het tweede argument: member(x,[x _]). member(x,[_ Y]) :- member(x,y). Member kan gebruikt worden om te testen, maar ook om Prolog om een element van die lijst te vragen.

22 Allemaal 1-en, Deelverzameling % allemaalenen/1?lijstvaneenen allemaalenen([1]). allemaalenen([1 X]):- allemaalenen(x). % deelverzameling/2 +DeelVz +Vz deelverzameling([],y). deelverzameling([x Y],Z):- member(x,z), deelverzameling(y,z).

23 Vertaal vertaling(x,y,v,u) is waar als alle voorkomens van X in V, Y in U zijn, en V en U verder identiek. vertaling(a,e,[b,l,a,b,l,a],u). U = [b,l,e,b,l,e].

24 Vertaal vertaling(_,_,[],[]). vertaling(x,y,[x Vt],[Y Ut]):- vertaling(x,y,vt,ut).

25 Vertaal vertaling(_,_,[],[]). vertaling(x,y,[x Vt],[Y Ut]):- vertaling(x,y,vt,ut). vertaling(x,y,[vh Vt],[Vh Ut]):- X \== Vh, vertaling(x,y,vt,ut).