(let ((title ’(Scheme Macros)) title) Syntaktiske transformationer og en masse parenteser.

Slides:



Advertisements
Lignende præsentationer
Throw a die Read the current value of index Add 1 Return the new value to index IndexIndex Create an empty array to count the number of dice throws Initialize.
Advertisements

Velkommen til Softwarekonstruktion
Overskrift her Navn på oplægsholder Navn på KU- enhed For at ændre ”Enhedens navn” og ”Sted og dato”: Klik i menulinjen, vælg ”Indsæt” > ”Sidehoved / Sidefod”.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Sprog, sprog og sprogere Foreningen for tosprogede småbørns vilkår Vejle 20. marts 2012 J. Normann Jørgensen,
Objektorienteret programmering
1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Peter Mikkelsen Med arbejdsglæde til top præstationer.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Kvalitet i almindelighed og i relation til softwareudvikling.
Induktion og rekursion
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Tidsskriftsmodulet. eLib seminar 18.–19. november 2004  Tidsskriftsmodulet er en del af accessionsklienten  Subskription  Udgivelsesmønster (2 metoder)
FEN KbP/seminar2: LoopsReview1 Kontraktbaseret programmering Seminar 2 Udvikling af løkker: Checklisten for løkker “Hånd-i-hånd” udvikling.
Endelige Automater Simple sprog (regulære sprog) kan beskrives vha. Regulære udtryk. Regulære sprog kan altid parses vha endelige automater. Nondeterministik.
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
1 Unified Expression Language Copyright © Lund & Bendsen A/S Unified Expression Language.
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Tekstslide i punktform Rubrik, helst 1 linje Brug ”Forøg/Formindsk indryk” for at få de forskellige niveauer frem Danish Standards  Signe Annette Boegh.
Paradigmer i Programmering 4. IO + oversigt over udtryk.
Fejl  Afleveringen  Stikprøvestørrelse  Type I-II Fejl  Styrkefunktionen.
Sociology and social media af: Mads, Emil, Caspar og Jos.
Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN KbP/seminar3: Opsamling.
FEN Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet  (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad.
Eksempel på realisering af domænemodel
Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.
Design, verifikation og analyse
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Paradigmer i Programmering 4. Resten af ML -Læse fra/skrive til filer -Interaktive programmer -Separat oversættelse -Parsergeneratorer.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Kvantitative metoder 2: Den multiple regressionsmodel1 Kvantitative metoder 2 Den multiple regressionsmodel 26. februar 2007.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
DB analyse og modellering Jesper Tørresø DAB1 F Februar 2008.
Økonometri 1: Den multiple regressionsmodel1 Økonometri 1 Den multiple regressionsmodel 15. februar 2006.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Web services SOA, SOAP og WSDL. Disposition Inledning / Definition SOAP Standard SOAP Beskeder WSDL.
T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Indledende Programmering Uge 6 - Efterår 2006
Økonometri 1: Den multiple regressionsmodel1 Økonometri 1 Den multiple regressionsmodel 17. september 2004.
Objekt-relationel DBMS1 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Dylan makroer / JSE Andreas Kirkeskov Carlsen 27. april 2005.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering3E.1 Syntaksbeskrivelse Udtryk og Java-programmer.
Opdragsgiver Planlægning og udførelse af møde med jeres opdragsgiver.
RMS - Record Management System Record Store En Record er et bytearray af vilkårlig størrelse En RecordStore er et antal Records nummerede.
CEAC Hvad er det ? Hvad kan vi få ud af det ? v/ Dan Foldager.
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Ændr 2. linje i overskriften til AU Passata Light 6TH OF OCTOBER 2015 AARHUS UNIVERSITET AU MASTER THESIS INFORMATION MEETING SOFIE VEJE AND JACOB BONDE.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data.
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 2 – Mandag
DB analyse og modellering
Compositional Design Principles “SemiCiv”
Klasser og objekter (Afsnit i manualen).
Simpel test-client (javascript) Session og Application data
λ-calculus and church encodings
Er det muligt at foretage et sikkert valg?
Præsentationens transcript:

(let ((title ’(Scheme Macros)) title) Syntaktiske transformationer og en masse parenteser

(Scheme Macros) Scheme makroer har udformningen ( *) hvor er en konstant, en identifier eller en -liste eller -vektor.

(Scheme Macros) Standarden er givet i R 5 RS, men der findes mange udvidelser, bl.a. PLT Scheme Chez Scheme MIT/GNU Scheme …

(Scheme Macros) Scheme makroer defineres med (define-syntax (syntax-rules ( *) ( )*)) hvor skal være på formen ( )

(Scheme Macros) er som udvidet med identifier’en ” … ” ( ) binder til det, den står lige efter svarer til regulære udtryks ”*”

(Scheme Macros) Eksempel: (define-syntax begin (syntax-rules () ((begin e1 e2 …) ((lambda () e1 e2 …))))) (begin (display ”Hej”) (newline)) ((lambda () (display ”Hej”) (newline)))

(Scheme Macros) Makroer kan introducere makro-specifikke keywords Eksempel: (define-syntax my-apply (syntax-rules (with) ((my-apply f with a1 a2 …) (f a1 a2 …)) ((my-apply f a1 …) (f a1 …))))

(my-apply + with 1 2 3) (Scheme Macros) ( )

(my-apply + with 1 2 3) (Scheme Macros) ( ) (let ((with 4)) (my-apply + with 1 2 3)) (let ((with 4)) (+ with 1 2 3) Men

(my-apply + with 1 2 3) (Scheme Macros) ( ) Makro-specifikke keywords matcher kun, hvis de begge ikke er bundne eller har samme leksikale binding (let ((with 4)) (my-apply + with 1 2 3)) (let ((with 4)) (+ with 1 2 3) Men

Hygiejnisk ekspansion: JA (Scheme Macros) (define-syntax variable-use (syntax-rules () ((variable-use) m))) (let ((m 2)) (variable-use)) Reference to undefined identifier: m (define m 1) (define-syntax variable-use (syntax-rules () ((variable-use) m))) (let ((m 2)) (variable-use)) 1

Rekursion: Ja (Scheme Macros) (define-syntax letstar (syntax-rules () ((letstar ((name val)) e1 e2 …) ((lambda (name) e1 e2 …) val)) ((letstar ((name val) r …) e …) ((lambda (name) (letstar (r …) e …)) val))))

(Scheme Macros) (letstar ((x 1) (y 2) (r (+ x y))) r) ((lambda (x) ((lambda (y) ((lambda (r) r) (+ x y))) 2)) 1)

Ekspansionsorden: Outer Kropsekspansion: Lazy (Scheme Macros) (define-syntax plus (syntax-rules () ((plus e1 e2 …) (+ e1 e2 …)))) (define-syntax macro-if (syntax-rules (true false) ((macro-if true m1 m2) m1) ((macro-if false m1 m2) m2))) (macro-if true (plus 1) (plus)) (+ 1) (macro-if false (plus 1) (plus)) Bad syntax in (plus)

Multiple definitioner: nej – gendefinerer makroen (Scheme Macros) (define-syntax macro-if (syntax-rules (true) ((macro-if true m1 m2) m1))) (define-syntax macro-if (syntax-rules (false) ((macro-if false m1 m2) m2))) (macro-if true (plus 1) (plus 2)) Bad syntax in macro-if

Makroer som resultat: Ja (Scheme Macros) (define-syntax macro-definer (syntax-rules () ((macro-definer name rules) (define-syntax name rules)))) (macro-definer when (syntax-rules () ((when pred then) (if pred then)))) (when (= 1 2) (explode))

Garanteret terminering: nej (Scheme Macros) (define-syntax loop (syntax-rules () ((loop) (loop)))) (loop)

Garanteret terminering: nej (Scheme Macros) (define-syntax loop (syntax-rules () ((loop) (loop)))) (loop) Garanteres aldrig at terminere pga. tail recursion

Programmerbare: Ja (Scheme Macros)

(define-syntax define-record (syntax-rules () ((define-record name id...) (let* ((constructor-name (string->symbol (string-append "make-" (symbol->string 'name)))) (predicate-name (string->symbol (string-append "is-" (symbol->string 'name) "?"))) (id-list '(id...)) (record-length (+ (length id-list) 1))) (eval `(begin (define,constructor-name (lambda,id-list (vector 'name id...))) (define,predicate-name (lambda (x) (and (vector? x) (= (vector-length x),record-length) (eq? (vector-ref x 0) 'name)))))))))) Programmerbarhed gennem eval-funktionen:

(define-syntax test (let ((m #t)) (begin (display `(Test with,m)) (if m (syntax-rules () ((test) 100)) (syntax-rules () ((test) 200)))))) Direkte programmering: Dog kraftigt begrænset af, at scope er internt, dvs. (define m #t) (define-syntax test (if m (syntax-rules () ((test) 100)) (syntax-rules () ((test) 200)))) Reference to undefined identifier: m

(Scheme Macros) Opsummering: Level of operation: Language dependent: Programmable: Definition keywords: Invocation syntax: Multiple definitions: Recursion: Body expansion: Order of expansion: Hygienic expansion: Macros as results: Guaranteed termination: Syntactical Yes Yes define-syntax, let-syntax, letrec-syntax ( _ _ _) No Yes Lazy Outer Yes Yes No