Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
|
|
- Maja Dahlberg
- för 5 år sedan
- Visningar:
Transkript
1 1 2 Dagens föreläsning En konstruktion i Common Lisp som möjliggör att man kan skapa ny Lisp-kod, som i sin tur beräknas. - makrobegreppet - makrofunktioner - special form - makrodefintion - backquote - rekursivt definierade makrofunktioner - problem med namnkollision - vad kan definieras som makros: - ej beräkning av argumenten till en funktion, ex trace, defun - utvigning av språket - egna styrstrukturer, dvs argumenten beräknas speciellt, ex while, for - effektivisering, abstrakta datatyper Jämför föregående föreläsning: Funktion - interpretator/beräknare Makro - kompilator/översättare Makro-begreppet Begreppet förekommer i samband med progamspråk eller programmering, men kan ha en lite olika betydelse i olika sammanhang. I samband med programspråk innebär detta ofta en förbearbetning av programtext. En preprocessor. Till exempel att textsträngar byts ut mot andra. C med #define där konstant text kan ersättas: #define PROGRAM int main( void ) #define BEGIN { #define END ;} PROGRAM int main( void ) BEGIN { printf( "Hallo!\n" ) printf( "Hallo!\n" ) END ;} Man kan göra in-line av en funktion: #define sgn(a) (a< 0? -1 : 1) x = pow ( fabs ( x ), 2.0 ) * sgn ( x ); x = pow ( fabs ( x ), 2.0 ) * (x< 0? -1 : 1); Man kan styra med villkorliga makro med #if. 3 4 Makrofunktioner i Lisp Olika slags funktioner i Lisp Vi kan generalisera denna förprocessering till att utföras när programmert bearbetas, direkt under interpreteringen eller vid kompilering. Eftersom Lisp-program är representerade i språkets egna datstrukturer kan vi göra denna bearbetning på den strukturella - representations -nivån i stället för på text-nivån. Vi kan nu definiera makrofunktioner med hela Lispspråkets kraft. Vi behöver inget speciellt makrospråk. Med denna makro-facilitet är det enkelt att bygga ut språket med nya konstruktioner. Lisp-språket självt utnyttjar denna möjlighet att skapa nya kontrsuktioenr mycket omfattande. Normala funktioner Beräknar sina argument enligt call-by-value. Beräkna argumenten först, applicera sedan funktionen. Hanteras av Lisp s apply-funktion. Special form Funktioner som är hårdkodade direkt i Lisp-interpretatorn. Nya kan ej definieras! if, progn, quote, setq, return,... Makrofunktioner Funktioner i Common Lisp som vanligen beräknar sina argument på eget sätt, som kan överföras till normala funktioner eller special form. Nya kan definieras! cond, or, and, setf, dotimes
2 5 6 I Lisp-evaluatorn (minlisp från kap 21 och föregående föreläsning) kan vi observera följande: (defun mini-eval (form env) ; uttryck x symboltabell -> uttryck (cond ((constant? form) (evaluate-constant form)) ((variable? form) (lookup-value form env)) ((conditional? form) (eval-conditional (clauses form) env)) (t (mini-apply (function-part form) (evalargs (args-part form) env) env)))) special form Här bearbetas vanliga call-by-value - funktioner beräkna alla argumenten (defun mini-apply (fn args env) ; funktion x argumentlista x symboltabell -> uttryck (cond ((primitive-function? fn) (primitive-apply fn args)) ((function-symbol? fn) (mini-apply (lookup-definition fn) args env)) ((lambda? fn) (mini-eval (body fn) (extend-env (bind (formal-params fn) args) env))) (t (error "u.d.f - undefined function ~s" fn)))) Definition av egna makrofunktioner. (defmacro makronamn parameterlista makrokropp) Obs. Parametrarna binds till de oevaluerade aktuella parametrarna (ej som för vanliga funktioner, där argumenten först beräknas) Makroexpansion - tvåstegs process översättning och beräkning (makrofn arg1 arg2... argn) => makrofunktionen för makrofn appliceras på argumenten och översättning => ger som resultat ett nytt Lisp-uttryck => som i sin tur ges för beräkning Jämför från tidigare föreläsning: funktion - interpretator -> ger ett värde makro - kompilator -> ger programkod 7 8 När sker makroexpansion? vid interpretering direkt efter varandra: översättning beräkning vid kompilering två olika tillfällen: översättning vid kompilering beräkning vid exekveringstillfället (av den kompilerade koden) Detta betyder att man vid definition av en makro ej får förutsätta kännedom om variabler, funktioner mm som ej är tillgängliga vid makroexpansionstillfället. Därför kan man vanligen ej använda eval. Med interpretatorfunktionen eval kan vi beräkna ett Lisp-uttryck vi skapat. (eval (list first (list quote (a b c)))) -> (eval (first (quote (a b c)))) -> (first (quote (a b c))) => a Interpretatorfunktionen apply är en variant av funcall. (apply # (lambda (op args) (cons op args)) (+ (1 2 3)))) => ( ) lista med färdigberäknade argument Makroexpansion kan då i dessa interpretatorfunktioner beskrivas enligt följande: Beräkning av makrouttrycket makuttr = (makrofn arg1... argn): görs genom att Lisp gör följande: (eval (apply makrofunktionen för (first makroutr) (rest makuttr)))
3 9 10 Om vi på något sätt kan känna igen makrofunktioner, så kan vi implementera makroutveckling i minilisp enligt följande: (defun mini-eval (form env) ; uttryck x symboltabell -> uttryck (cond ((constant? form) (evaluate-constant form)) ((variable? form) (lookup-value form env)) ((conditional? form) (eval-conditional (clauses form) env)) ((macro-function? form) (mini-eval (mini-apply (lookup-macro-def (function-part form)) (args-part form) env) env)) ingen evaluering av argument makroutvecklingen jämför (t (mini-apply (function-part form) (evalargs (args-part form) env) env)))) Funktionen evalargs evaluerar argumenten i en argumentlista. Exempel: Vi önskar använda två-vägs cond-uttryck, som vi kallar cond-2. Språket tillhandahåller endast ett if-uttryck. (defun f (l) (cond-2 ((endp l) nil) (t (first l))) ) Definiera en makrofunktion för cond-2: - 2 fall (defmacro cond-2 (cl1 cl2) (list if (first cl1) (second cl1) (second cl2))) En test av funktionen f med ett argument: (f (a b c)) -> (cond-2 ((endp l)...)...) -> l binds till (a b c) makroutveckling av cond-2: -> (eval (apply # (lambda (cl1 cl2) (list if (first cl1) (second cl1) (second cl2))) (((endp l) nil) (t (first l)))) cl1 binds till ((endp l) nil) cl2 binds till (t (first l)) -> (eval (if (endp l) nil (first l))) => a kod blir argument Backquote som quote, men uttryck inne i det backquote ade uttrycket kan beräknas. Mycket lämplig att använda i samband med att man definierar makrofunktioner. Uttryck efter kommatecken beräknas! (a,(+ 13 5) (x,(list a b))) => (a 18 (x (a b))) Jämför med quote: (a (+ 13 5) (x (list a b))) => (a (+ 13 5) (x (list a b))) (let ((l (a b c))) (a (,(second l) c d),(rest l)) => (a (b c d) (b c)) Backquote (a,(+ 13 5) (x,(cons a b))) är samma som (list a (+ 13 5) (list x (cons a b))) (backquote) är ett sk readmacro som utförs vid inläsningstillfället (samma som vanliga quote) Dessutom finns,@ som slice ar in en lista (let ((lista (x y))) (a,@lista b)) => (a x y b)
4 13 14 Makrodefinitionen av cond-2 (defmacro cond-2 (cl1 cl2) (list if (first cl1) (second cl1) (second cl2))) kan därför ersättas med: (defmacro cond-2 (cl1 cl2) (if,(first cl1),(second cl1),(second cl2))) Lisp använder makroutveckling Med funktionen macroexpand-1 kan man se resultatet av makroutvecklingen. Även cntrl-c m och menyn under ACL -> debug. (macroexpand-1 (cond (a b) (t c))) => (IF A (PROGN B) (COND (T C))) (macroexpand-1 (and a b c)) => (COND ((NOT A) NIL) ((NOT B) NIL) (T C)) (macroexpand-1 *) (1) => (IF (NOT A) (PROGN NIL) (COND ((NOT B) NIL) (T C))) (macroexpand-1 (or a b c)) => (COND (A) (B) (T C)) (macroexpand-1 *) (LET ((#:G6373 A)) (IF #:G6373 #:G6373 (COND (B) (T C)))) (1) I Common Lisp betyder på toppnivån * (som variabel) senaste utmatning Användning av makrofunktioner Oevaluerade argument Effektivisering Kompilering av primitiver, genom att ersätta anrop med definitionen och substituera in aktuella parametrar. (defun skapa-klockslag (min tim) (cons min tim)) kan då ersättas med makrofunktionen: (defmacro skapa-klockslag (min tim) (cons,min,tim)) Koden: (... (skapa-klockslag m (start-tim s))...) makroutvecklas till (... (cons m (start-tim s))...) som sedan kan kompileras till t. ex. maskinkod I många funktioner quote ar man ej argumenten, ex (trace remove) (defun f (x y) (list y x)) (setq kalle ( )) Vi har definierat en boka-funktion där vi skriver: (boka 1 jan (10 30) (12 30) möte ) Antag vi vill ha en boka utan att behöva quote a argumenten: (boka 1 jan (10 30) (12 30) möte ) (defmacro boka (d m start slut akt) (boka-int,d,m,start,slut,akt)) där boka-int är den utsprungliga boka-funktionen
5 17 18 Annan evalueringsordning av argument (dvs ej call-by-value) Skriv en funktion om som fungerar som if. Fungerar (defun om (p s1 s2) (if p s1 s2)) Javisst! (om (> 10 5) (+ 10 2) (- 10 2)) => 12 Men? (defun fak (n) (om (= n 0) 1 (* n (fak (1- n))) )) (fak 3)? (fak 2) -> (om nil 1 (* 2 (fak 1))) -> (om nil 1 (* 2 (om nil 1 (* 1 (fak 0))))) -> (om nil 1 (* 2 (om nil 1 (* 1 (om t 1 (* 0 (fak -1)))) ))) -> (om nil 1 (* 2 (om nil 1 (* 1 (om t 1 (* 0 (om nil (* -1 (fak -2))) )))))) -> i oändlig repetition! Definiera om som en makro: (defmacro om (p s1 s2) (if,p,s1,s2)) Annat exempel: Öka en global variabel med ett värde. (setq nr 10) (incr nr (+ 2 3)) - öka nr med 5, dvs -> (setq nr (+ nr (+ 2 3))) nr => 15 (defmacro incr (glob-var val-expr) (setq,glob-var (+,glob-var,val-expr)))) Detta problem kan lösas i vissa andra språk med en möjlighet att ha utparametrar och parameteröverföringsmodellen call-by-reference. I Ada kommer ni träffa på denna möjligheten. Finns ej i Java. Rekursivt definierat makro Givet en binär operator binplus. Skapa en operator plus som tar ett godtyckligt antal argument. Använd makro och gör en stegvis översättning av uttrycket till binplus. (plus) -> 0 (plus x) -> x (plus x y z 8) -> (binplus x (plus y z 8)) (defmacro plus (&rest args) (cond ((endp args) 0) ((endp (rest args)) (first args)) (t (binplus,(first args) (plus,@(rest args))) )))
6 21 22 Tillägg av nya styrstrukturer Exempelvis iterativa strukturer från Ada (while, for etc) (let ((i 10)) (while (> i 0) (print i) (setq i (- i 1)))) skriver ut 10, 9, 8, tom 1 Hitta motsvarande iterativa konstruktion och använd den som mall. (let ((I 10)) (loop (unless (> i 0) (return nil)) (print i) (setq i (- i 1))))) Makrodefinition av while (defmacro while (pred &rest exprs) (loop (unless,pred (return nil)),@exprs)) I Common Lisp Det finns en mycket omfattande loop-konstruktion, som tillåter alla tänkbara sätt att vilja beskriva en repetition. Dessa makroutvecklas. (Se t ex (loop for i from 1 to 10 do (print i)) skriver ut 1, (macroexpand-1 (loop for i from 1 to 10 do (print i))) =>(utvecklas till lite förenklat) (block nil (let ((I 1)) (tagbody next-loop (print I) (setq I (+ i 1)) (when (> i 10) (go end-loop)) (go next-loop) end-loop))) (defun f (max) (loop for n from 1 to max when (oddp n) collect n)) (f 10) => ( ) (macroexpand-1 (loop for n from 1 to max when (oddp n) collect n)) => (utvecklas till förenklat) (block nil (let* ((n 1) Tekniken att bygga upp resultatet tas upp mer i nästa föreläsning (loop-list-head (list nil)) (loop-list-tail loop-list-head)) (tagbody next-loop (if (oddp n) (setf (cdr loop-list-tail) (setq loop-list-tail (list n)))) (setq n (+ n 1)) (when (> n max) (go end-loop)) (go next-loop) end-loop (return-from nil (cdr loop-list-head)))))) Domänspecifika programmeringsspråk (DSL) Ett specialiserat språk för en domän med sin egen syntax. På wikipedia via domänspercifika språk har vi ett scriptspråk för att beskriva ett spel. (Ett kommersilett bolag: Zillions_of_Games#Scripting_language T ex tic-tac-toe.
7 25 26 Domänspecifika programmeringsspråk (DSL) Här använder man syntaxen för S-notation (dvs den vi använder i Lisp). Ett alternativ hade kunnat vara XML-taggar. (game (title "Tic-Tac-Toe") (description "...") (history "...") (strategy "...") (players X O) (turn-order X O) (board (image "images\tictactoe\tttbrd.bmp") (grid (start-rectangle ) ; top-left position (dimensions ;3x3 ("top-/middle-/bottom-" (0 112)) ; rows ("left/middle/right" (112 0))) ; columns (directions (n -1 0) (e 0 1) (nw -1-1) (ne -1 1)))) (piece (name man) (help "Man: drops on any empty square") (image X "images\tictactoe\tttx.bmp" O "images\tictactoe\ttto.bmp") (drops (add-to-empty))) (board-setup (X (man off 5)) (O (man off 5))) (draw-condition (X O) stalemated) (win-condition (X O) (or (relative-config man n man n man) (relative-config man e man e man) (relative-config man ne man ne man) (relative-config man nw man nw man)))) Domänspecifika programmeringsspråk (DSL) Hur implementerar vi det domänspecifika språket? Vi kan skriva en interpretator alt. kompilator. Vi kan med hjälp av makroutveckling i Lisp kunna köra detta program (det är i S-notation) och för varje kommando skapa en makro som utvecklas till sådan kod som skapar och kör spelet. En del uttryck kan kanske direkt var körbara i Lisp (defmacro game (&rest commands)...) (defmacro title (name)...)... Vi har då genomfört en översättning av kod i det domänspecifika språket till Lisp-kod Problem att ta hänsyn till Ny lösning av problemet att öka global variabel med ett värde. (setq nr 10) (incr nr (+ 2 3)) skall översättas till: -> (setq nr (+ nr (+ 2 3))) felaktigt översatt till: -> (setq nr 15) (defmacro incr (glob-var val-expr) (list setq glob-var (+ (eval glob-var) (eval val-expr)))) Fungerar interpreterat men ej kompilerat! Se till att inte beräkna uttryck i onödan! Ibland blir det helt fel! Exempel: Som tidigare med incr, men öka två variabler med samma värde. (setq nr 10) (setq size 20) (incr2 nr size (+ 2 5)) - öka både nr och size med 2 nr => 17 size => 27 (defmacro incr2 (var1 var2 val-expr) (setq,var1 (+,var1,val-expr)) (setq,var2 (+,var2,val-expr)))) val-expr kommer att beräknas två gånger - tar extra tid - sidoeffekter utförs flera gånger (incr2 nr size (print 7))
8 29 30 Lösningen är att införa lokal variabel! (defmacro incr2 (var1 var2 val-expr) (let ((value,val-expr)) (setq,var1 (+,var1 value)) (setq,var2 (+,var2 value))))) (incr2 nr size (+ 2 (print 5))) -> (let ((value (+ 2 (print 5)))) (setq nr (+ nr value)) (setq size (+ size value)))) Utskriften av 5 kommer bara att ske en gång! Men det kan även bli variabelkollision då vi inför egen lokal variabel. Vad händer här? (setq nr 10) (setq value 100) (incr2 nr value (+ 2 5)) value =>? nr =>? (incr2 nr value (+ 2 5)) -> (let ((value (+ 2 5))) (setq nr (+ nr value)) (setq value (+ value value)))) 31 Lösning: Vi behöver ett unikt namn för den lokala variabeln. I Lisp finns en funktion gensym (generate symbol) som genererar en ny symbol. (gensym a ) => #:a11 (gensym a ) => #:a12 (defmacro incr2 (var1 var2 val-expr) (let ((local-var (gensym value ))) (let ((,local-var,val-expr)) (setq,var1 (+,var1,local-var)) (setq,var2 (+,var2,local-var)))))) (incr2 nr value (+ 2 5)) -> (let ((#:value7 (+ 2 5))) (setq nr (+ nr #:value7)) (setq value (+ value #:value7))))
Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.
1 Dagens föreläsning Modeller för programmeringsspråk - Olika modeller programspråk Interpretator - kompilator - Olika typer av språk Statiska och dynamiska programspråk - Syntax - semantik. Grammatik
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 Dagens föreläsning Modeller för programmeringsspråk Interpretator - att interpretera ett program - att beräkna ett program - Olika modeller programspråk Interpretator - kompilator program i S interpretator
Tentamen i. TDDC67 Funktionell programmering och Lisp
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering
Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur
Imperativ programmering konstruktioner i Lisp Imperativ programmering I den imperativa programmeringen skriver vi program satsvist. Datastrukturer (kap.-.) aystruktur poststruktur Iterativa uttryck (avs.)
Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning
1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch
Tentamen i. TDDA 69 Data och programstrukturer
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDA 69 Data och programstrukturer Torsdag den 14 januari 2009, kl 14-18 Hjälpmedel: Inga. Poänggränser: Maximalt
Dagens föreläsning Programmering i Lisp Fö 5
Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch
Uppgift 6A - Frekvenstabell
Uppgift 6A - Frekvenstabell (defstruct par element antal) (defun unika-element (lista) (reduce #'(lambda (x y) (if (listp x) (if (find y x) x (cons y x)) (if (eq x y) x (list x y)))) lista)) (defun sortera-tabell
TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15
TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd
Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler
21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse
OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15
OMTENTAMEN I PROGRAMSPRÅK -- DVG C01 130823 kl. 08:15-13: 15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd
Våra enkla funktioner eller procedurer
Föreläsning 3 Våra enkla funktioner eller procedurer Programmönster 1. Repetition 2. Högre-ordningens procedurer/programmönster - Procedurer som argument - Procedurer som returnerade värden 3. Scope och
TDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)
Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk
1 Dagens föreläsning Programmering i Lisp Fö 7 Kopplingen funktionella programmering och diskret matematik. Jämför vad ni hittills gjort i denna kurs och i den diskreta matematiken, med referenser in i
Dagens föreläsning. - Vad skall vi kunna inför den skriftliga examinationen? - Vad skall vi ta med oss till andra kurser.
1 Dagens föreläsning - Vad handlade kurserna (TDDC66 och TDDC67) egentligen om? - Vad skall vi kunna inför den skriftliga examinationen? - Vad skall vi ta med oss till andra kurser. - Vad kan vi förvänta
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK
FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,
TDDC74 Programmering, abstraktion och modellering DUGGA 2
AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011
Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock
Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.
TDP002 - Imperativ programmering
TDP002 - Imperativ programmering Algoritmer Pontus Haglund Institutionen för datavetenskap Anpassatt från material ursprungligen av: Eric Elfving 1 Datatyper Tal UTF-8 2 Procedurell abstraktion Repetition
Programmering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
allt.cl Page 1 of 17 Date: torsdag 7 december 2006
allt.cl Page 1 of 17 Slumpspelaren Väljer slumpvis en flytt ur möjliga flyttar. (defun skapa-slump-spelare (namn bricktyp) "lisp-sträng x bricka -> spelare" (skapa-spelare #'slump-gör-flytt namn bricktyp))
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Repetition C-programmering
Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition
Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.
Strömmar (streams) De sista dagarna objekt med tillstånd modellerades som beräkningsobjekt med tillstånd. Isådana modeller är tiden modelerad (implicit) som en sekvens av tillstånd. För att kunna modellera
TDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2011-06-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Fredag 10 juni
Uppgift 4A - Definition av enkla funktioner
Uppgift 4A - Definition av enkla funktioner (defun start-klockslag (tidsperiod) "tidsperiod -> klockslag" (typkontroll tidsperiod #'tidsperiod?) (first (packa-upp tidsperiod))) (defun slut-klockslag (tidsperiod)
Rekursiva algoritmer sortering sökning mönstermatchning
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell
n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?
Tidigare TDDC74 Programming: Abstraktion och modellering Föreläsning 4 Symboler, Par, Listor Representation av par, Grafisk notation för par Representation av listor mha par Typiska listhanteringsprocedurer
TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017
FÖRELÄSNING 1 TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 Introduktion till kursen Schemespråkets grunder Enkla exempel Jalal Maleki Institutionen för datavetenskap Linköpings universitet
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
TDDC74 Programmering: Abstraktion och modellering Datortenta
TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
F4. programmeringsteknik och Matlab
Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel
732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser
Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och
TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Föreläsning 3: Booleans, if, switch
TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt
TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
TDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2011-08-17 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Onsdag 17 augusti
Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19
Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och
I dag: Blockstruktur, omgivningar, problemlösning
Förra gången Förra gången: Rekursiva procedurer I dag I dag: Blockstruktur, omgivningar, problemlösning (define add-1 (define add-2 (lambda (a b) (lambda (a b) (if (= a 0) (if (= a 0) b b (+ 1 (add-1 (add-2
Klassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Program & programmering
Program & programmering Vad är program? Satser och instruktioner, toggla igenom exempel Program på olika nivåer, för olika maskiner, för olika saker Tolka program; kompilator, intepretator, binärbytekod,
Introduktion C-programmering
Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder
Funktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:
Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03-12 Lösningsförslag Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03- 12 Läs alla frågorna först och bestäm dig för den ordning som passar dig
Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016
Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar
LABORATION 1. Inledande Lisp - rekursion
AI - Lisp / Laboration 1 - Inledande Lisp - rekursion 1 LABORATION 1 Inledande Lisp - rekursion 1.0 LABFÖRORD Detta labbmaterial ger dig introduktion till Lisp för att kunna använda programmeringsspråket
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter
Typsystem. Typsystem... Typsystem... Typsystem... 2 *
Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Deklarativ programmering
Deklarativ programmering TDP007 Konstruktion av datorspråk Föreläsning 7 Peter Dalenius Institutionen för datavetenskap 2014-03-03 Deklarativ programmering Program skrivet i ett deklarativt språk logikspråk,
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.
DAT 060: Introduktion till (funktions)programmering. Jacek Malec m. fl. www.cs.lth.se/home/jacek Malec/dat060 Idag: 1. Kursens innehåll 2. Kursens organisation 3. Programmeringsspråket Scheme 4. Introduktion
Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python
Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python
TDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2012-01-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 10 januari
Introduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
Deklarationer/definitioner/specifikationer
Deklarationer/definitioner/specifikationer Konstantdefinitioner innebär att ett namn binds och sätts att referera till ett värde som beräknas vid kompileringen/interpreteringen och som under programmets
FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION
FÖRELÄSNING 2, TDDC74, VT2018 Begrepp och definitioner (delvis från föreläsning 1) Fallanalys som problemlösningsmetod Rekursivt fallanalys Rekursiva beskrivningar och processer de kan skapa Rekursiva
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 TDDC66 Datorsystem och programmering TDDC67 Funktionell programmering Programmering i Lisp, examinator TDDC67 föreläsare i Lisp Peter Dalenius examinator TDDC66 kursassistent i Lisp + ett stort antal
FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION
TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 Jalal Maleki Institutionen för datavetenskap Linköpings universitet jalal.maleki@liu.se FÖRELÄSNING 1 Introduktion till kursen Schemespråkets grunder
TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java
(Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart
TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i
Objektorienterad programmering i Java
bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det
Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
TDDC77 Objektorienterad Programmering
TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om
TDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2011-01-11 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 11 januari
Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet
Procedurer och villkor Rekursiva procedurer (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between
Procedurer och villkor
Procedurer och villkor (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between 3 2 5) #f DA2001
Deklarativ programmering
Kursens mål Deklarativ programmering Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2008-02-26 redogöra för och använda reguljära uttryck använda XML för att definera
Funktioner. Linda Mannila
Funktioner Linda Mannila 13.11.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Intro till funktioner och moduler Villkorssatsen
TDDC74 Programmering, abstraktion och modellering DUGGA 1
AID-nummer: Datum: 2011-02-04 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 1 Fredag 4 feb 14-16
Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15
DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION 120607 08:15-13: 15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition En ordbok: studentenshemspråk engelska Betygsgräns:
OOP Objekt-orienterad programmering
OOP Objekt-orienterad programmering OOP F1:1 Delkursansvarig Epost Kursens webbsidor sm@fc.dsv.su.se http://people.dsv.su.se/~sm/oop/ Föreläsning 1 Introduktion till kursen OOP Vad är Java? Ett första
Metoder (funktioner) Murach s: kap Winstrand Development
(funktioner) Murach s: kap 6 2013-01-23 1 Winstrand Development Metoder I C# kan vi dela in koden i block en kodsekvens ska köras likadant på flera ställen i applikationen. Detta block kallas för en metod
GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167
GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,
Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):
Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3,
TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel
TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Grundläggande datalogi - Övning 1
Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b
MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...
Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»
Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler
Outline Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Vända om inlästa värden Vända om inlästa
Att skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)
Symbolisk data (1 2 3 4) (a b c d) (jacek johan david) ((jacek "jacek@cs.lth.se") (johan "johang@cs.lth.se") (david "dat99dpe@ludat.lth.se")) ((anna 13) (per 11) (klas 9) (eva 4)) (+ (* 23 4) (/ y x))
Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen
Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler,datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande
Föreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Föreläsning 2. Operativsystem och programmering
Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (