Våra enkla funktioner eller procedurer

Relevanta dokument
BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC74 Programmering, abstraktion och modellering DUGGA 1

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

TDDC74 Programmering, abstraktion och modellering. Tentamen

Förra gången: Primitiva data

I dag: Blockstruktur, omgivningar, problemlösning

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)

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Föreläsning 9 Exempel

DD1361 Programmeringsparadigm. Carina Edlund

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering. Tentamen

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Dagens föreläsning Programmering i Lisp Fö 5

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datortenta

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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?

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Funktionens deklaration

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Tentamen i. TDDA 69 Data och programstrukturer

TDP002 - Imperativ programmering

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen i. TDDC67 Funktionell programmering och Lisp

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Deklarationer/definitioner/specifikationer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Obligatorisk uppgift 5

1 3H 0 2gre ordningens procedurer

Inlämningsuppgift MiniPlotter

Klassdeklaration. Metoddeklaration. Parameteröverföring

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Föreläsning 6: Metoder och fält (arrays)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Föreläsning 5. Rekursion

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDIU01 - Programmering i C++, grundkurs

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

kl Tentaupplägg

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

TDP007 Konstruktion av datorspråk Hemtentamen

Idag: Dataabstraktion

Pascal... Pascal. Pascal... Pascal...

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Rekursion och induktion för algoritmkonstruktion

Programmering II (ID1019) :00-17:00

TDDC77 Objektorienterad Programmering

Rekursion och induktion för algoritmkonstruktion

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Objektorienterad Programmering (TDDC77)

TDDC74 - Lektionsmaterial C

Föreläsning 5 i programmeringsparadigm.

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Föreläsning 6: Introduktion av listor

Planering Programmering grundkurs HI1024 HT TIDAA

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Funktioner. Jan Erik Moström,

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Transkript:

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 syntaktiska sockret LET kan vara resultatet av översättning av en fakta eller formel fallanalys och problem nedbrytning (t ex genom rekursion) generalisering av en existerande funktion/procedur specificering av en generell funktion/procedur (define (sum-squares a b) (+ (square a) (sum-squares (+ a 1) b)))) (define (sum-cubes a b) (+ (cube a) (sum-cubes (+ a 1) b)))) 1 2 3 Observera likheter: Bortsett från namnen, mycket lite skiljer dessa åt Det som skiljer dessa nu är den funktion de applicerar till a Helt rika, förutsatt att fn specificeras på något sätt (define (sum-squares a b) (+ (square a) (sum-squares (+ a 1) b)))) (define (sum-cubes a b) (+ (cube a) (sum-cubes (+ a 1) b)))) (+ (square a) (+ (cube a) 4 5 6

Generalisering genom paramtrisering Sigma är nu en generell funktion Man kan tänka sig olika varianter på Sigma (sigma (+ a 2) b fn)))) 7 8 9 Ytterligare parametriseing och därmed generalisering av Sigma Använd generell sigma Ackumulation genom summering och multiplicering (define (sum-squares a b) (sigma a b square inc)) (define (sum-cubes a b) (sigma a b cube inc)) Liten uppgift: Hur skriva ett program som summerar en följd av heltal? (define (mult a b fn next) (mult (next a) b fn next)))) 10 11 12

Annan typ av ackumulation Låt oss tillfälligt kalla båda för acc Mycket lite som skiljer de åt (define (mult a b fn next) (mult (next a) b fn next)))) 13 14 15 Ytterligare parametrisering av dessa ackumulationer Ytterligare parametrisering av dessa ackumulationer Ytterligare generalisering eller parametrisering av ackumulationer 16 17 18

En mycket generell ackumulation Fixa parametrarna till en generell ackumulation för att få en mer speci. ackumulation Fixa parametrarna till en generell ackumulation för att få en mer speci. ackumulation (acc a b fn next 0 +)) (define (sum a b) (acc a b (lambda (x) x) inc 0 +)) 19 20 21 Definera specifika ackumulationer i termer av acc Programmera genom att använda programmönster Procedurer som returnerade värden (define (sum a b) (acc a b (lambda (x) x) inc 0 +)) Så ett sätt att skapa program är att skicka olika parametrar till generella program och på det sättet skapa de program som utför specifika jobb. I Scheme är detta möjligt eftersom man kan ha så kallade högre-ordningens procedurer. Exempel: Sammansättning av två funktioner f(g(x)) (define compose (lambda (f g) (lambda (x) (f (g x))))) (define (compose f g) (lambda (x) (f (g x)))) 22 23 24

Användning av procedurer som returneras som värde exempel: double repeatfn (define compose (lambda (f g) (lambda (x) (f (g x))))) ((compose inc sqr) 3) Uppgift: Använd substitutionsmodellen för att visa hur detta uttryck evalueras. Skriv en funktion double som tar en funktion f med en parameter och som returnerar en annan funktion g (också med en parameter). g(x) skall motsvara f(f(x)). Skriv en funktion repeatfn med två parametrar f och n, där f är en funktion med en parameter och n är ett heltal 1. repeatfn skall returnera en funktion som applicerar f, n gånger. dvs, f(f(f f(x))). repeatfn(f, n) = f om n=1 λ(x) repeatfn(f, n-1)) f(x) 25 26 27 Scope Exempel Scope: lokal vs global Ett namn i Scheme som betecknar ett värde eller en procedur har en Scope Vidd eller sammanhang är förmodligen bra svenska ord för detta begrepp, men vi fortsätter att använda Scope Scope definierar i vilken del av programkoden ett givet namn gäller (define add1 (+ number 10))) Scopen för number är procedurens kropp. >(add10 3) 13 > number Error: reference to undefined identifier: number (define number 20) (define add1 (+ number 10))) > (add10 15) 25 > (add10 number) 30 28 29 30

Scope: lokal vs global Shadowing (skuggning) Exempel (define number 20) (define add1 (+ number 10))) > (add10 15) 25 > (add10 number) 30 (define number 23) (define add1 (+ number 10))) add10:s definition, genom att skapa ett namn, number, skuggar (eller med andra ord kör) över det globala värdet av number Skriv ett program som tar två heltal n och m och returnerar fib(n) om fib(n) = 2.fib(m) annars returnerar den fib(m). (define f (lambda (n m) (if (= (fib n) (* 2 (fib m))) (fib n) (fib m)))) OBS! Antingen (fib n) eller (fib m) beräknas två gånger. Onödigt! 31 32 33 Exempel: undvik onödiga beräkningar Exempel: LET snyggar upp koden LET Skriv ett program som tar två heltal n och m och returnerar fib(n) om fib(n) = 2.fib(m) annars returnerar den fib(m). (define f (lambda (n m) ((lambda (fibn fibm) (if (= fibn (* 2 fibm)) fibn fibm)) (fib n) (fib m)))) Skriv ett program som tar två heltal n och m och returnerar fib(n) om fib(n) = 2.fib(m) annars returnerar den fib(m). (define f (lambda (n m) (let ((fibn (fib n)) (fibm (fib m))) (if (= fibn (* 2 fibm)) fibn fibm)))) let används för att skapa lokala scope i vilket man evaluerar viss kod. (let ((<para 1 > <exp 1 >) (<para 2 > <exp 2 >) (<para n > <exp n >)) <body>) Lättare att följa än lambda 34 35 36

LET binder sina variabler parallellt, dvs vid samma ögonblick Fel Sammanfattning Testa följande: (define a 12) (let ((a 5) (b a)) (+ a b)) Syntaktiska fel Uttryck som ej går att evaluera Semantiska fel Syntaktisk korrekta men meningslösa uttryck Algoritmiska fel Programmet löser annat problem än det man vill Evaluering mha substitutionsmodellen Procedurer och processer Recursivt skrivna procedurer Rekursiva processer Iterativa processer Trädrekursiva processer Scope: lokala och globala namn let Högre ordningens procedurer Funktioner som argument Funktioner som värden 37 38 39