I dag: Blockstruktur, omgivningar, problemlösning

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

Procedurer och villkor

Förra gången: Primitiva data

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Föreläsning 9 Exempel

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

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

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.

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

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

1 3H 0 2gre ordningens procedurer

Våra enkla funktioner eller procedurer

Idag: Dataabstraktion

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

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

Deklarationer/definitioner/specifikationer

TDDC74 Programmering, abstraktion och modellering. Tentamen

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)

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

DD1361 Programmeringsparadigm. Carina Edlund

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

Idag: Dataabstraktion

TDDC74 - Lektionsmaterial C

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

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

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

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

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

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

Funktioner. Jan Erik Moström,

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

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

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?

Objektorientering: Lagring, räckvidd och livstid

Datalogi, grundkurs 1

Metoder (funktioner) Murach s: kap Winstrand Development

Programmeringsteknik med C och Matlab

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

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

Funktionens deklaration

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Rekursiva algoritmer sortering sökning mönstermatchning

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

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

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

TDDC74 Lab 02 Listor, sammansatta strukturer

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

Datalogi, grundkurs 1

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Programdesign. Dokumentera. Dokumentera

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Programmering II (ID1019) :00-17:00

Föreläsning 5 Innehåll

PROGRAMMERING-Java Omtentamina

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Laboration 1 Introduktion till Visual Basic 6.0

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

9. Predikatlogik och mängdlära

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

TDIU01 - Programmering i C++, grundkurs

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

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

Sätt att skriva ut binärträd

Programmering = modellering

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

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

Datalogi, grundkurs 1

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

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

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

Funktioner och programstruktur. Föreläsning 5

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

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

Denna uppdelning är ovanlig i Sverige De hela talen (Både positiva och negativa) Irrationella tal (tal som ej går att skriva som bråk)

Funktioner. Linda Mannila

Tentamen i. TDDA 69 Data och programstrukturer

Matematik 1 Digitala övningar med TI-82 Stats, TI-84 Plus och TI-Nspire CAS

Transkript:

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 (- a 1) (- a 1) b))))) (+ b 1))))) Tänk: Proceduren add-1 är inte svansrekursiv eftersom den utför en beräkning på resultatet av det rekursiva anropet Tänk: Proceduren add-2 är svansrekursiv eftersom den inte utför någon beräkning på resultatet av det rekursiva anropet Vad är en blockstruktur? Vad är en omgivning? Hur skriver man ett program som löser ett problem? Analys med matematik översättning från matematik till program top-down-metodik se problemet ovanifrån och bryta ner i delar alltefter lösa varje del för sig Bra om du läst igenom i AS: Example: Square Roots by Newton s Method samt Procedures as Black-Box Abstractions Procedures and the Processes They Generate Linear Recursion and Iteration Tree Recursion DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 1 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 2 / 20... Variabler definierade utanför en procedur syns även inuti proceduren: >(define x 1) >(define y 10) >(define sumofthree-1 (+ x y z))) >(sumofthree-1 100) 111 Variablerna x och y är globala i proceduren sumofthree-1, medan z är en lokal variabel. I många situationer vill man gömma vissa definitioner så att de inte används på ett felaktigt sätt. Då kan man ha lokala definitioner: >(define sumofthree-2 (define local-x 1) (define local-y 10) (+ local-x local-y z))) >(sumofthree-2 100) 111 local-x och local-y är lokala variabler i proceduren sumofthree-2. De lokala variablerna är inte definierade utanför proceduren. Om man exekverar uttrycket: >local-x kommer Scheme att klaga över unbound variable. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 3 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 4 / 20

... Blockstruktur En omgivning (ett scope ) för en variabel är de uttryck för vilka variabeln är definierad. (define sumofthree-1 (define sumofthree-2...))...)) Till ex har den formella parametern z i proceduren sumofthree-1 och den i proceduren sumofthree-2 olika definitioner och skall betraktas som två olika formella parametrar. På samma sätt som man definierar lokala variabler kan man definiera lokala procedurer: >(define sum-of-square (lambda (x y) (define square (* z z))) (+ (square x) (square y)))) >(sum-of-square 3 4) 25 Här har en procedur definierats inuti en annan procedur. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 5 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 6 / 20 Blockstruktur... Blockstruktur... Man har en blockstruktur där sum-of-square utgör det yttre blocket och square det inre blocket. Proceduren square är inte definierad utanför sum-of-square, så square kan enbart användas inuti sum-of-square. Variabler eller formella parametrar definierade i ett yttre block kan omdefinieras i ett inre block. Det är då den innersta definitionen som gäller i det inre blocket. (define sum-of-square ;;; yttre blocket börjar! (lambda (x y) (define square ;;; inre blocket börjar! (* x x))) ;;; inre blocket slutar! (+ (square x) (square y)))) ;;; yttre blocket slutar! Den formella parametern y är bunden endast i det yttre blocket, medan det finns en bindning av x både i det yttre och det inre blocket. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 7 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 8 / 20

Exempel: kvadratrot Dra roten ur x: x = y omm y y = x y y = x Men det är inte direkt överförbart till Scheme. Ovanstående är en deklarativ beskrivning, en beskrivning av hur saker förhåller sig till varandra, inte hur beräkningar skall gå till Vi behöver en imperativ beskrivning,en beskrivning av hur (med vilka kommandon) en beräkning utförs, så vi skriver om uttrycket stegvis y = x y y + y = y + x y 2 y = y + x y DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 9 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 10 / 20 2 y = y + x y y = y n+1 = y + x y 2 y n + x y n 2 y n x/y n (y n + x/y n )/2 y n+1 1 2/1 = 2 (2 + 1)/2 1.5 1.5 2/1.5 = 1.3333 (1.3333 + 1.5)/2 1.4167 1.4167 2/1.4167 = 1.4118 (1.4167 + 1.4118)/2 1.4142 1.4142 Det här kan man göra om till ett Scheme-program! Om man gissar ett värde (t.ex. y 0 = 1) och sedan förbättrar detta värde med hjälp av formeln, tills yn+1 2 skiljer sig väldigt lite från x så kan man acceptera y n+1 som x. Fungerar det? Testa med t.ex. x = 2! DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 11 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 12 / 20

(squareroot-iter 1 x))) (if (good-enough? x) (squareroot-iter (improve x) x)))) (/ (+ (/ x )) 2))) I den sista proceduren (improve) binds namnet improve till programmets globala omgivning medan λ-uttrycket definierar en omgivning där namnen och x binds. Namnen och x syns bara inne i proceduren och vi kan använda vilka namn vi vill utan att behöva tänka på namnkollisioner. (lambda (p q) (/ (+ p (/ q p)) 2)) går lika bra men det blir inte lika lätt att förstå vad p och q har för roll. Namnen squareroot-iter, good-enough?, och improve behövs endast då squareroot beräknas så de kan döljas inne i den omgivning som finns inuti squareroot. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 13 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 14 / 20 Bindningar ;; här börjar lokala definitioner (if (good-enough? x) (squareroot-iter (improve x) x)))) (/ (+ (/ x )) 2)) ;; här slutar lokala definitioner och raden nedan är procedurkroppen till squareroot (squareroot-iter 1 x))) I uttrycket (+ x y) är både x och y fria variabler och det måste finnas både definitioner så man vet vad de betyder och värden så att uttrycket kan beräknas. Dessa måste då finnas i någon yttre omgivning. I uttrycket (lambda(x) (+ x y)) är x bundet. y är fortfarande fritt och måste då vara bundet i någon yttre omgivning till uttrycket. I det senaste squareroot-programmet ändras aldrig x. Så x behöver inte bindas i de lokala procedurerna. Vi kan skapa en blockstruktur där varje lambda-uttryck definierar ett block. får en egen omgivning med egna bindningar. får en gemensam bindning av x. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 15 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 16 / 20

Definition av lokala variabler (lambda () (if (good-enough? ) (squareroot-iter (improve ))))) (lambda () (lambda () (/ (+ (/ x )) 2))) I stället för define kan man använda let eller let* för att definiera lokala variabler. (define sumofthree-2 (let ((localx 1) (localy 10)) (+ localx localy z)))) Initieringar av lokala variabler i ett let-uttryck görs inte i en specificerad ordning. (squareroot-iter 1))) DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 17 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 18 / 20 Definition av lokala variabler... Nästa gång: Om man vill initiera lokala variabler i en sekvensiell ordning, så ska man använda let* (define sumofthree-3 (let* ((localx 1) (localy 10) (x+y (+ localx localy))) (+ x+y z)))) I vissa fall krävs mer än ett värde för att representera en enhet, t.ex. rationella tal, komplexa tal eller en punkts koordinater i ett plan eller i rymden. Hur ska vi kunna hantera en sådan samling data? Hur ska vi kunna manipulera sådana sammansatta data? Bra om ni läser i AS: Pair i avsnittet: Example: Arithmetic Operations for Rational Numbers Inledningen i avsnittet: Hierarchical Data and the Closure Property Representing Sequences. DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 19 / 20 DA2001 (Föreläsning 5) Datalogi 1 Hösten 2010 20 / 20