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



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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Förra gången: Primitiva data

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

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

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

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?

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

Procedurer och villkor

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Våra enkla funktioner eller procedurer

Programmering A. Johan Eliasson

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

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

Programmeringsteknik med C och Matlab

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

SMD 134 Objektorienterad programmering

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Språket Python - Del 1 Grundkurs i programmering med Python

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Textsträngar från/till skärm eller fil

Deklarationer/definitioner/specifikationer

Föreläsning 9 Exempel

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Tentamen OOP

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

Tentamen i. TDDA 69 Data och programstrukturer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

Idag: Dataabstraktion

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

Idag: Dataabstraktion

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Studiehandledning till. MMA121 Matematisk grundkurs. Version

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

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 DUGGA 3

Facit till Några extra uppgifter inför tentan Matematik Baskurs. x 2 x

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

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Föreläsning 6: Introduktion av listor

Språket Python - Del 2 Grundkurs i programmering med Python

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDDC74 Programmering, abstraktion och modellering DUGGA 2

I dag: Blockstruktur, omgivningar, problemlösning

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Parameteröverföring. Exempel. Exempel. Metodkropp

Datalogi, grundkurs 1

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

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

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Tentamen i. TDDC67 Funktionell programmering och Lisp

DD1361 Programmeringsparadigm. Carina Edlund

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

Grundläggande programmering med C# 7,5 högskolepoäng

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, Tid: kl 08-10, Datum:

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

FÖRELÄSNING 1 ANALYS MN1 DISTANS HT06

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Objektorienterad Programmering (TDDC77)

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

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

Uppgift 6A - Frekvenstabell

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

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

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

TDDC74 - Lektionsmaterial C

"if"-satsen. Inledande programmering med C# (1DV402)

Föreläsning 2 Programmeringsteknik och C DD1316

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Dugga Datastrukturer (DAT036)

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

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

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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)

Tentamen i Introduktion till programmering

Föreläsning 3: Booleans, if, switch

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

2.4. Teckensträngar och logiska uttryck

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

Repetition av filer Grundkurs i programmering med Python

Transkript:

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 till Scheme Språket Scheme DrScheme uttryck evaluering av uttryck felsökning substitutionsmodellen evalueringsstrategi Program och processer Högre-ordningsprocedurer Jacek Malec, Dept. of Computer Science, Lund University 3 Jacek Malec, Dept. of Computer Science, Lund University 4 Språket Scheme Primitiva uttryck konstanter namn primitiva procedurer DrScheme www.cs.rice.edu/cs/plt/package/drscheme www.cs.lth.se/home/jacek Malec/dat060 Sammansättningsregler Sammansatta uttryck Specialformer Abstraktionsmöjligheter Definition (define) Lambda-abstraktion Blockstruktur - gruppering av procedurer Högre-ordningsprocedurer

Namn Ett namn är en sekvens av tecken som inte utgör ett tal. Konstanter Sanningsvärden: #t, #f Heltal: 3, +4567, -34 Bråk: 3/4, -3/8, +34/5 Flyttal: 3.14159, 4.2e-10, -2e3 Komplexa tal: 3.1+3.1i, 1-1i vecka23 Jacek + -1-2+2 +a.3 http://www.cs.lth.se/ det-är-också-ett-namn-fast-lång Jacek Malec, Dept. of Computer Science, Lund University 7 Jacek Malec, Dept. of Computer Science, Lund University 8 Primitiva procedurer De som redan finns definierade i Scheme: +, -, *, /, expt, log,... sin, cos, tan,... cons, list, append,... read, newline, display,... time, random,... Sammansatta uttryck (uttryck uttryck uttryck...) (procedur argument argument...) (+ 2 3) 3 deluttryck (+2 3) 2 deluttryck (+ (2 3)) 2 deluttryck...

Define (define namn uttryck) (define namn (lambda (param1 param2...) kropp)) Namn kommer att stå för värde av uttryck fr.o.m. nu. Read-eval-print 1. Read Scheme läser in ett uttryck. 2. Evaluate Uttrycket tolkas enligt förutbestämda regler (språkets semantik). Resulterar i ett värde. 3. Print Värdet skrivs ut. Jacek Malec, Dept. of Computer Science, Lund University 11 Jacek Malec, Dept. of Computer Science, Lund University 12 Evaluering av primitiva uttryck Uttryck Värde Utmatning #t true #t #f false #f tal tal namn namns värde 3 talet 3 3 pi pi 3.1415 6/2 talet 3 3 + procedur + #<primitive:+> Evaluering av sammansatta uttryck Tre olika fall f kan vara: 1. en primitiv procedur 2. en egendefinierad procedur 3. en special form (särskilt form)

Evaluering av sammansatta uttryck egendefinierad procedur Evaluering av sammansatta uttryck primitivapplikation f är en primitiv procedur 1. evaluera (beräkna värdet) av f och argumenten 2. utför (lambda (x y) (* (+ x y) 0.5)) (lambda parametrar kropp) Anrop: ((lambda (x y) (* (+ x y) 0.5)) 4 8) ((lambda parametrar kropp) argument) Jacek Malec, Dept. of Computer Science, Lund University 15 Jacek Malec, Dept. of Computer Science, Lund University 16 Att namnge egna procedurer (define medelvärde (lambda (x y) (* (+ x y) 0.5))) Namnet medelvärde tilldelas värdet av lambda-uttrycket, dvs en procedur vars parametrar och kropp anges av lambda-uttrycket. Ibland: (define (medelvärde x y) (* (+ x y) 0.5))) Evaluering av sammansatta uttryck f är en egendefinierad procedur: 1. Beräkna värdet av f och argumenten 2. I f :s kropp ersätt forekomster av formella parametrar med respektive argumentvärde 3. Evaluera kroppen

Omgivningar Fel 1. syntaktisk fel - ett uttryck kan inte tolkas 2. semantisk fel - evalueringsfel uppstår 3. algoritmisk fel - felaktiga resultat fås För att komma ihåg vilket namn är associerat med vilket värde (betydelse av olika namn) måste evaluatorn komma ihåg alla definitioner, associationer mellan namn och värde, etc. För detta används tabeller. Tabellerna initialiseras så att de innehåller alla inbyggda primitiver Sådana tabeller heter omgivningar. Det kan finnas flera! Jacek Malec, Dept. of Computer Science, Lund University 19 Jacek Malec, Dept. of Computer Science, Lund University 20 Ett exempel > (medelvärde 4 8) 6.0 Vad händer? (define medelvärde (lambda (x y) (* (+ x y) 0.5))) Substitutionsmodellen Substitutionsmodellen för evaluering reduktion Ett mekaniskt sätt att tolka uttryck och beräkna deras värde. (medelvärde 4 10) ((lambda (x y) (* (+ x y) 0.5)) 4 10) (* (+ 4 10) 0.5) (* 14 0.5) 6.0 Två sorter: Applikativ reduktion Normal reduktion

Applikativ reduktion f är en egendefinierad procedur: 1. Beräkna värdet av f och argumenten 2. I f :s kropp ersätt forekomster av formella parametrar med respektive argumentvärde 3. Evaluera kroppen Normal reduktion f är en egendefinierad procedur: 1. Beräkna värdet av f 2. I f :s kropp ersätt forekomster av formella parametrar med respektive argument 3. Evaluera kroppen Jacek Malec, Dept. of Computer Science, Lund University 23 Jacek Malec, Dept. of Computer Science, Lund University 24 Special forms Uttryck av följande form tolkas enligt särskilda regler och inte som uttryck som gör proceduranrop (define...) (if...) (cond...) (and...) (or...) (lambda (...)...) Exempel (define invertera (lambda (x) (if (= x 0) +inf.0 (/ 1 x))))

Procedurer vs speciella former > + #<primitive:+> > if keyword: invalid use of keyword if > if (if uttr1 uttr2 uttr3 ) Beräkna uttr1 Om sant, beräkna uttr2 annars beräkna uttr3 Jacek Malec, Dept. of Computer Science, Lund University 27 Jacek Malec, Dept. of Computer Science, Lund University 28 cond cond (cond (predikat1 konsekvens1) (predikat2 konsekvens2)... (predikatn konsekvensn) ) (cond klausul-1 klausul-2... ) Ta en klausul i taget och beräkna klausulens predikatuttryck tills sant värde fås, evaluera sedan resp. konsekvensuttryck. (define ränta (lambda (belopp) (cond ((< belopp 0) 0) ((< belopp 10000) 0.5) ((< belopp 100000) 1.8) ((>= belopp 100000) 2.8)))) (define ränta (lambda (belopp) (cond ((< belopp 0) 0) ((< belopp 10000) 0.5) ((< belopp 100000) 1.8) ((>= belopp 100000) 2.8))))

Indentering and, or (and argument1 argument2...) (or argument1 argument2...) Argumenten evalueras från vänster till höger tills sanningsvärdet för hela uttrycket kan bestämmas. (define abs (lambda (x) (cond ((< x 0) (- 0 x)) ((= x 0) 0) ((> x 0) x)))) eller (define abs (lambda (x) (cond ((< x 0) (- 0 x)) ((= x 0) 0) ((> x 0) x)))) Jacek Malec, Dept. of Computer Science, Lund University 31 Jacek Malec, Dept. of Computer Science, Lund University 32 Exempel Procedurer utan parametrar (define teenager (lambda (age) (if (and (> age 12) (< age 20)) #t #f))) eller (define teenager (lambda (age) (and (> age 12) (< age 20)))) > (define five (lambda () 5)) > (five) 5 > (define five 5) > five 5 >