Presentatie Michiel. Informaticastage najaar 2004

Vergelijkbare documenten
Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Ingebouwde klassen & methodes

Modelleren en Programmeren

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

DOMjudge teamhandleiding

IMP Uitwerking week 13

Modelleren en Programmeren

DOMjudge teamhandleiding

Game of Life in Java

Modelleren en Programmeren

1 Inleiding in Functioneel Programmeren

Uitleg van de Hough transformatie

Modelleren en Programmeren

Een stoomcursus door Edgar de Graaf, november 2006

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Overerving & Polymorfisme

DOMjudge teamhandleiding

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

slides6.pdf 16 nov

College Introductie

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Vakgroep CW KAHO Sint-Lieven

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

Objectgericht programmeren 1.

Muziek. Muziek. Analoog rekenen. Hoofdstuk 1: Van analoog naar digitaal. Analoog. Digitaal. Analoog. Gebruik makend van fysische grootheden Cf Babbage

Modelleren en Programmeren


recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Programmeren in Java 3

Objectgericht programmeren 1.

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Inleiding Programmeren 2

Tentamen Imperatief Programmeren

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Honours projecten BSc Informatica: twee voorstellen

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

Programmeren in Java

Geest, brein en cognitie

PO: Informatica Olympiade

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

DNAQL Simulator. Presentatie Bachelorproef. Tom Desair. Universiteit Hasselt. Academiejaar

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Modelleren en Programmeren

Elementary Data Structures 3

Lessen Java: Reeks pag. 1

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Voortgezet Prog. voor KI

Verzamelingen, Lijsten, Functioneel Programmeren

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Verzamelingen, Lijsten, Functioneel Programmeren

In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen.

Tweede college algoritmiek. 12 februari Grafen en bomen

Modelleren en Programmeren

Creatief onderzoekend leren

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Scala. Korte introductie. Sylvia Stuurman

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

Zelftest Programmeren in Java

Zelftest Inleiding Programmeren

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Programmeermethoden NA. Week 5: Functies (vervolg)

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

APPLICATIEBOUW 1E COLLEGE: INTRODUCTIE. Onderdeel van SmartProducts

INFITT01 - Internettechnologie WEEK 8

Voorlopig onderzoeksplan Bachelorscriptie CleanDoc-

Verzamelingen, Lijsten, Functioneel Programmeren

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

Java Les 3 Theorie Herhaal structuren

Modelleren en Programmeren

eerste voorbeelden in Java

Java Programma structuur

Oefenzitting Werken met Java Achtergrond BVP

Tentamen Programmeren in C (EE1400)

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Datastructuren Programmeeropdracht 2: Expressies. 1 Expressies. Deadlines. Woensdag 12 oktober 23:59, resp. woensdag 2 november 23:59.

Een eenvoudig algoritme om permutaties te genereren

Kleine cursus PHP5. Auteur: Raymond Moesker

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

Ontwerp van Informatiesystemen

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Abstracte klassen & Interfaces

Dynamisch Programmeren. Het Rugzakprobleem

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Stacks and queues. Hoofdstuk 6


Programmeren in Java les 3

Toegankelijke geo-informatie. NCDT 20 juni 2013 Thijs Brentjens

Modelleren en Programmeren: Prolog

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Programmeren (1) Examen NAAM:

10 Meer over functies

Transcriptie:

Presentatie Michiel michielborkent@gmail.com Informaticastage najaar 2004

Inhoud presentatie: Wie ben ik? Over mijn stage Informatie over Lisp

Wie/wat ben ik? Student Technische Informatica, Universiteit Twente

O.a. grote interesse in muziek Michiel, Hongarije 1991

Op zoek naar een stage. Idee?

Combineren van interesses! stage

Op zoek naar stage Zoeken in op de woorden: muziek informatica stage. Uitkomst MMM: Music Mind Machine. Machine = informatica, Music = andere interesse. Puzzel (bijna) compleet!

Michiel doet stage bij MMM, najaar 2004

Inhoud stage Compositie mbv computer Geschiedenis: verschillende benaderingen. Voornamelijke opdeling: continue (signal processing) vs. discreet (symbolisch)

Opsplitsing duidelijk in midi: discrete gebeurtenissen sturen continue signalen aan. Midi commando, bijv. Start een centrale C met luidsterkte 127 Midi apparaat Discrete gebeurtenissen synthesizer Continue geluidsgolven

Voorbeeld midi sequence ("00:00:00.000 0/0 ProgChange (00)") ("00:00:00.500 0/0 KeyOn (60 127)") ("00:00:01.500 0/0 KeyOff (60 127)")

Ook mogelijk om continue verloop binnen een discrete gebeurtenissen te besturen, bijvoorbeeld vibrato of panning.

Continue verloop op te vatten als functie van tijd. Bijvoorbeeld: constant(t) = 61 vibrato(t) = 61 + sin(pi*t). Constant(t) Vibrato(t)

Probleem: hoe moeten de continue besturingsfuncties zich gedragen als de gebeurtenis waarop ze betrekking hebben een transformatie ondergaat? 3 belangrijke voorbeelden: vibrato, glissando, ornament

Voorbeeld 1: vibrato en transformatie

Voorbeeld 2: glissando

Voorbeeld 3: ornament

Oplossing: functies van meerdere soorten tijd Soorten tijd: starttijd van de discrete gebeurtenis, duratie van een discrete gebeurtenis, de actuele tijd tijdens het doorlopen van de discrete gebeurtenis Functies van deze soorten tijd kunnen het gedrag van bovenstaande voorbeelden op de gewenste manier representeren.

Stageomschrijving Maak een legodoos met bouwblokjes waarmee je van simpele GTF s complexere kunt bouwen GTF = Generalized Time Function: functies van een veralgemeend tijdsconcept.

Voorbeeld: concatenate Conceptueel: glissando van toonhoogte 61 naar 62 over een tijdsduur 1

Voorbeeld: concatenate Interne representatie: (note pitch duration amplitude) (note 61 1 1) =>

Voorbeeld: concatenate Interne representatie: (note pitch duration amplitude) (note (ramp 61 62) 1 1) => GTF

Voorbeeld: concatenate Conceptueel: twee glissando s aan elkaar vastgeplakt, van 61 naar 62 en terug

Voorbeeld: concatenate Interne representatie: (draw (note (concat-gtf #'start-time 1 1)) (ramp 61 62) (proportional.5) (ramp 62 61) #'end-time ) GTF s

Grafisch: Voorbeeld: concatenate

Voorbeeld: reverse-gtf (setf crazy-gtf (concat-gtf #'start-time (gtf+ (lift-relative (sine.4) 0) (ramp 61 62)) (proportional.2) (gtf+ 62 (lift-relative (sine.2) 0)) (proportional.7) (ramp 62 63) (proportional.9) (ramp 63 61) #'end-time))

Voorbeeld: reverse-gtf

Voorbeeld: reverse-gtf

Iets over Lisp Waarom gebruik ik Lisp? Eigenschap van een functionele programmeertaal: functies kunnen andere functies opleveren: hogere orde functies Deze mogelijkheid niet aanwezig in: Java, C++, Pascal (Delphi)

Lisp taal van de AI? Mijn stelling: In Lisp kun je je ideeen sneller en mooier implementeren dan in andere talen. Waarom Lisp specifiek taal van de AI (wellicht)?

Lisp heeft zowel praktische (zie zometeen) als theoretische eigenschappen waardoor het een geschikte AI taal is. Hedendaagse AI en Cognitiewetenschap: intelligent gedrag is het resultaat van symboolmanipulatie. Deze stelling is bekend onder de namen Physical Symbol System Hypothesis (PSSH) of Representational Theory of Mind.

Vereenvoudigd komt de PSSH (Newell, 1980) hierop neer: 1. Primitieve mentale concepten worden gerepresenteerd in een intelligent systeem door fysieke symbolen. 2. Complexe mentale concepten worden gerepresenteerd als structuren van fysieke symbolen.

PSSH (Newell, 1980) vervolg: 3. Intelligentie (een verzameling intelligente functies) is het resultaat van de manipulatie van structuren van fysieke symbolen. Die manipulatie gebeurt door programma's. 4. Programma's kunnen gerepresenteerd worden als fysieke symbool structuren. Op die manier kan een intelligent systeem leren (door de manipulatie van symboolstructuren die programma's representeren).

De primitieve datastructuren van LISP: symbolen en lijsten Compositie van complexe structuren makkelijk en mooi te doen in Lisp Samengestelde functietoepassing makkelijk en mooi te doen in Lisp Programma en data worden opdezelfde manier gerepresenteerd: de weg geopend naar programma s die programma s kunnen modificeren en construeren

Lisp voorbeeld praktijk Faculteitsfunctie fac(n). fac(1) = fac(0) = 1 (definitie) fac(2) = 2 * 1 (= 2) fac(3) = 3 * 2 * 1 (= 6) fac(4) = 4 * 3 * 2 * 1 (= 24)

Lisp voorbeeld praktijk Faculteitsfunctie fac(n). fac(1) = fac(0) = 1 (definitie) fac(2) = 2 * fac(1) (= 2) fac(3) = 3 * fac(2) (= 6) fac(4) = 4 * fac(3) (= 24)

Lisp voorbeeld praktijk Faculteitsfunctie fac(n). Algemene definitie: fac(1) = fac(0) = 1 fac(n) = n * fac(n-1), voor n > 1 Dit wordt ook wel een recursieve definitie genoemd.

Intermezzo: prefix en infix notatie. infix notatie: 3 + 5 4 < 7 prefix notatie (gebruikt in Lisp): + 3 5 < 4 7

Lisp voorbeeld praktijk Faculteitsfunctie fac(n). Algemene definitie: fac(1) = fac(0) = 1 fac(n) = n * fac(n-1), voor n > 1 Idee uitgewerkt in Lisp: (defun fac (n) (if (< n 2) 1 (* n (fac (- n 1)))))

Lisp voorbeeld praktijk Faculteitsfunctie fac(n). Algemene definitie: fac(1) = fac(0) = 1 fac(n) = n * fac(n-1), voor n > 1 Uitproberen levert op: > (fac 4) 24

Lisp voorbeeld praktijk Nu hetzelfde in Java: import java.io.*; class Faculteit { public static int fac(int n) { if (n > 0) return n * fac(n - 1); else return 1; } } public static void main(string[] args) throws IOException { BufferedReader toetsenbord; toetsenbord = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Getal n?"); String invoertekst; invoertekst = toetsenbord.readline(); int getal; getal = Integer.parseInt(invoertekst); System.out.println(getal + "! = " + fac(getal)); }

Lisp voorbeeld praktijk Om nu je programma te testen moet je eerst het geheel compileren, wat er op mijn computer als volgt uitzag: fsw20262:~/java borkent$ javac Faculteit.java Daarna kun je eindelijk je programma gaan uitproberen: fsw20262:~/java borkent$ java Faculteit Getal n? 4 4! = 24

Lisp Lisp is interactief, implementatie valt snel uit te proberen en te wijzigen (Daardoor) overhead voor zaken als in- en uitvoer naar het scherm is niet groot (itt tot het Java voorbeeld) Lisp is niet alleen functioneel, maar combineert belangrijke eigenschappen van verschillende talen

Conclusies Combineren interesses met studiekeuze is mogelijk, zeker als studiekeuze = AI Computer is een handige tool bij muziekcompositie. Voorbeeld is mijn stageonderwerp. Lisp is een interactieve taal, waarin mogelijk is om snel en mooi je ideeen om te zetten in werkende code