Modelleren en Programmeren

advertisement
Modelleren en Programmeren
Jeroen Bransen en Michael Moortgat
29 januari 2014
Overzicht
Java
Imperatief programmeren
I
Von Neumann (1950): computer = geheugen + processor
Imperatief programmeren
I
Von Neumann (1950): computer = geheugen + processor
I
Opdracht: wijzig het geheugen
Imperatief programmeren
I
Von Neumann (1950): computer = geheugen + processor
I
Opdracht: wijzig het geheugen
I
Programma: reeks van opdrachten, worden 1 voor 1 door
processor uitgevoerd
Programma en geheugen
Opdrachten
veranderen
Variabelen
zijn gegroepeerd in
zijn gegroepeerd in
Methoden
bewerken
Objecten
zijn gegroepeerd in
hebben als type
Klasse
Minimum en maximum voorbeeld
class MinMax2 {
public static void main(String[] args) {
int nums[] = { 99, -10, 100123, 18, -978,
5623, 463, -9, 287, 49 };
int min, max;
min = max = nums[0];
for(int i = 1; i < 10; i++) {
if(nums[i] < min) min = nums[i];
if(nums[i] > max) max = nums[i];
}
System.out.println("Min and max: " + min + " " + max);
}
}
Fibonacci
public class Fibonacci {
public static void main(String[] args) {
// Print het vijfde Fibonaccigetal
System.out.println(fib(5));
}
public static int fib(int n) {
// Basisgeval
if(n <= 1) return 1;
// Reken getal uit op basis van andere waarden
return fib(n-1) + fib(n-2);
}
}
Imperatieve programmeertalen
Behalve Java zijn er nog vele imperatieve programmeertalen, elk
met sterke en zwakke punten.
I
C en C++: low-level, kan hele efficiente code opleveren
Imperatieve programmeertalen
Behalve Java zijn er nog vele imperatieve programmeertalen, elk
met sterke en zwakke punten.
I
C en C++: low-level, kan hele efficiente code opleveren
I
C#: lijkt sterk op Java, van Microsoft
Imperatieve programmeertalen
Behalve Java zijn er nog vele imperatieve programmeertalen, elk
met sterke en zwakke punten.
I
C en C++: low-level, kan hele efficiente code opleveren
I
C#: lijkt sterk op Java, van Microsoft
I
Python: scriptingtaal
Imperatieve programmeertalen
Behalve Java zijn er nog vele imperatieve programmeertalen, elk
met sterke en zwakke punten.
I
C en C++: low-level, kan hele efficiente code opleveren
I
C#: lijkt sterk op Java, van Microsoft
I
Python: scriptingtaal
I
...
Prolog: tijdslijn
I
1972 — Colmerauer/Roussel: eerste interpreter
Prolog: tijdslijn
I
1972 — Colmerauer/Roussel: eerste interpreter
I
1977 — Warren: DEC10 compiler
Prolog: tijdslijn
I
1972 — Colmerauer/Roussel: eerste interpreter
I
1977 — Warren: DEC10 compiler
I
1980 — Pereira/Warren: Definitie Clause Grammars
Prolog: tijdslijn
I
1972 — Colmerauer/Roussel: eerste interpreter
I
1977 — Warren: DEC10 compiler
I
1980 — Pereira/Warren: Definitie Clause Grammars
I
1980/90 — bloei, Europa, Japan
Prolog: tijdslijn
I
1972 — Colmerauer/Roussel: eerste interpreter
I
1977 — Warren: DEC10 compiler
I
1980 — Pereira/Warren: Definitie Clause Grammars
I
1980/90 — bloei, Europa, Japan
I
nu — NASA ISS natural language interface, delen van IBM
Watson QA, . . .
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
I
zoekt instanties van query die logisch volgen uit programma
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
I
I
zoekt instanties van query die logisch volgen uit programma
geeft die instanties als antwoorden terug
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
I
I
I
zoekt instanties van query die logisch volgen uit programma
geeft die instanties als antwoorden terug
Zoeken van bewijzen/afleidingen:
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
I
I
I
zoekt instanties van query die logisch volgen uit programma
geeft die instanties als antwoorden terug
Zoeken van bewijzen/afleidingen:
I
resolutie
Prolog essentials
I
Programma = beschrijving situatie m.b.v. feiten, regels
I
Query: bevragen van programma
Prolog:
I
I
I
I
zoekt instanties van query die logisch volgen uit programma
geeft die instanties als antwoorden terug
Zoeken van bewijzen/afleidingen:
I
I
resolutie
unificatie
Resolutie, unificatie, zoekboom
?-k(Y).
Y=X
?- f(X), g(X), h(X).
X=a
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
X=b
?-g(a),h(a).
?- g(b), h(b).
?-h(a).
?-h(b)
†
?- k(Y).
Logische programmeertalen
Prolog maakt onderdeel uit van een landschap van talen, elk met
hun eigen accent.
I
Datalog: logica voor deductive databases
Logische programmeertalen
Prolog maakt onderdeel uit van een landschap van talen, elk met
hun eigen accent.
I
Datalog: logica voor deductive databases
I
Constraint Logic Programming: propagatie van constraints
Logische programmeertalen
Prolog maakt onderdeel uit van een landschap van talen, elk met
hun eigen accent.
I
Datalog: logica voor deductive databases
I
Constraint Logic Programming: propagatie van constraints
I
Inductive Logic Programming: logica + machine learning
Logische programmeertalen
Prolog maakt onderdeel uit van een landschap van talen, elk met
hun eigen accent.
I
Datalog: logica voor deductive databases
I
Constraint Logic Programming: propagatie van constraints
I
Inductive Logic Programming: logica + machine learning
I
...
Vergelijking paradigma’s
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
I
controle via metaprogrammeren: programma als data
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
I
controle via metaprogrammeren: programma als data
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
I
controle via metaprogrammeren: programma als data
Imperatief:
I
Precieze controle over executie
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
I
controle via metaprogrammeren: programma als data
Imperatief:
I
Precieze controle over executie
I
Voorspelbaar gedrag van code
Declaratief — Imperatief
Declaratief: programmeren is redeneren
I
procedurele details zo mogelijk onder de zoekmotorkap
I
redeneren met incomplete informatie: unificatie vs recursie
I
controle via metaprogrammeren: programma als data
Imperatief:
I
Precieze controle over executie
I
Voorspelbaar gedrag van code
I
Abstraheren over vaak voorkomende patronen met objecten
en functies
Overeenkomsten
I
Modelleren
Overeenkomsten
I
Modelleren
I
Op grote schaal gebruikt
Overeenkomsten
I
Modelleren
I
Op grote schaal gebruikt
I
Bevatten bibliotheek met standaard-code
Overeenkomsten
I
Modelleren
I
Op grote schaal gebruikt
I
Bevatten bibliotheek met standaard-code
I
Beide Turing-compleet
Wanneer welk paradigma?
I
Controle over de procedures: Java
Wanneer welk paradigma?
I
Controle over de procedures: Java
I
Bewijzen zoeken in predicatencalculus: Prolog
Wanneer welk paradigma?
I
Controle over de procedures: Java
I
Bewijzen zoeken in predicatencalculus: Prolog
I
Conclusie: wees meertalig!
Vervolg
Java
Datastructuren
I
Direct vervolg op Java-deel van dit vak
Datastructuren
I
Direct vervolg op Java-deel van dit vak
I
Nadenken over efficientie van code
Datastructuren
I
Direct vervolg op Java-deel van dit vak
I
Nadenken over efficientie van code
I
“Slimme” implementaties van bijvoorbeeld Set
Inleiding Adaptieve Systemen
I
Systemen die interacteren met hun omgeving
Inleiding Adaptieve Systemen
I
Systemen die interacteren met hun omgeving
I
Zelflerende systemen
Inleiding Adaptieve Systemen
I
Systemen die interacteren met hun omgeving
I
Zelflerende systemen
I
Deel Java, deel Netlogo
Modelleren en Systeemontwikkeling
I
Standaard geen onderdeel KI
Modelleren en Systeemontwikkeling
I
Standaard geen onderdeel KI
I
Ontwerpen object georiënteerde systemen
Modelleren en Systeemontwikkeling
I
Standaard geen onderdeel KI
I
Ontwerpen object georiënteerde systemen
I
Alles wat er aan bod komt bij maken van software behalve
programmeren
Prolog
Inleiding taalkunde
Grammatica’s in Prolog: DCG, Definitie Clause Grammars.
I
Rijtjes en afleidingsbomen: s(Boom,Rijtje)
Inleiding taalkunde
Grammatica’s in Prolog: DCG, Definitie Clause Grammars.
I
Rijtjes en afleidingsbomen: s(Boom,Rijtje)
I
Syntaxis en semantiek: s(Syn,Sem)
Inleiding taalkunde
Grammatica’s in Prolog: DCG, Definitie Clause Grammars.
I
Rijtjes en afleidingsbomen: s(Boom,Rijtje)
I
Syntaxis en semantiek: s(Syn,Sem)
I
Automatisch vertalen: source(Sem,NL), target(Sem,IT)
Inleiding taalkunde
Grammatica’s in Prolog: DCG, Definitie Clause Grammars.
I
Rijtjes en afleidingsbomen: s(Boom,Rijtje)
I
Syntaxis en semantiek: s(Syn,Sem)
I
Automatisch vertalen: source(Sem,NL), target(Sem,IT)
I
Parseren: bottom up, top down, . . .
Logische grammatica’s
I
grammar = logic, parsing = deduction
Logische grammatica’s
I
grammar = logic, parsing = deduction
I
leren uit “big data”: inductie van grammatica uit treebanks
Intelligente systemen
I
programmeren van agents
Intelligente systemen
I
programmeren van agents
I
exploreren, en waarnemen in game omgeving
Intelligente systemen
I
programmeren van agents
I
exploreren, en waarnemen in game omgeving
I
logica voor planning en actieselectie
Overig
Functioneel Programmeren
I
Nog een ander paradigma
Functioneel Programmeren
I
Nog een ander paradigma
I
Functionele programmeertaal Haskell
Functioneel Programmeren
I
Nog een ander paradigma
I
Functionele programmeertaal Haskell
I
Sterk typesysteem
Download