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?

Relevanta dokument
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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

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

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

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

TDDC74 - Lektionsmaterial C

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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

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

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

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

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

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

Rekursiva algoritmer sortering sökning mönstermatchning

Tentamen i. TDDC67 Funktionell programmering och Lisp

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Föreläsning 9 Exempel

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

Datalogi, grundkurs 1

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

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

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

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

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

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Idag: Dataabstraktion

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

Sökning och sortering

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

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

Uppgift 6A - Frekvenstabell

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

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

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

Funktionell programmering DD1361

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 3 mars 2016

Tentamen *:58/ID100V Programmering i C Exempel 3

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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å

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

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

Datalogi, grundkurs 1

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

Våra enkla funktioner eller procedurer

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

allt.cl Page 1 of 17 Date: torsdag 7 december 2006

Föreläsning 3. Stack

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Programmeringsteknik med C och Matlab

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Magnus Nielsen, IDA, Linköpings universitet

Förra gången: Primitiva data

Tentamen i. TDDA 69 Data och programstrukturer

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

Idag: Dataabstraktion

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

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

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

Deklarationer/definitioner/specifikationer

Typkonvertering. Java versus C

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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

Föreläsning 6: Introduktion av listor

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Klassdeklaration. Metoddeklaration. Parameteröverföring

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

I dag: Blockstruktur, omgivningar, problemlösning

Tentamen , Introduktion till Java, dtaa98, dtea53

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 13 Testning och strängar

Transkript:

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 n Tidigare i kursen har vi skrivit procedurer som jobbar med tal. I princip materialet i kapitel 1 i kursboken n Detta för att kunna koncentrera oss på procedurer och processer de skapar Primitiv data: Tal, Symboler, Strängar,... Primitiv data av olika slag skapas genom att man skriver den enligt en särskild format n Tal: 2, 3.14 n Symboler: x, y, square, pi n Strängar: whatever, 123, \ n Tecken: #\2, #\c, #\C, #\$ n Boolsk: #t, #f Vilken typ av primitiv data har vi? Procedurer som testar: n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean? Jämföra primitiv data Symboler och QUOTE n Tal: =, <, > n Symboler: symbol=? n Strängar: string=?, string<?, string<=?, string>=? n Tecken: char=?, char<?, char>? n Boolskt: eqv? n Måste skilja mellan symboler som namn och symboler som data n QUOTE är en specialform som markerar att dess argument är data n Namn står för något annat symboler står för sig själva n Användning: (quote square) eller square

Symboler och QUOTE Sammansatt data (quote x) evalueras till symbolen x, men x evalueras till det värde som x är satt till. > (define namn 23) > (quote namn) namn > namn 23 n När data sammankopplas får vi sammansatt data Operationer av intresse - sammansatt data n Konstruktion n Selektion av delar Par n En grundläggande typ av sammansatt data i Scheme n Igenkänning och jämförelse n Förändring av delar (kapitel 3 SICP, fö 7-9) n Presentation eller utskrivning Par Grafisk notation för par n Konstruktion: proceduren CONS som tar två argument n Selektion: Procedurerna CAR och CDR används för att hämta car- resp. cdr-delen n Igenkänning: predikaren pair? används för att testa huruvida något är ett par n Presentation/utskrivning: ett par som skapats med (cons 1 2), skrivs ut som (1. 2) i Scheme

Grafisk notation för par (cons 10 20) Grafisk notation för par - alternativ (cons 10 20) 10 2 10 20 Grafisk notation för par (cons 10 (cons 20 30)) Grafisk notation för par - alternativ (cons 10 (cons 20 30)) 10 20 30 10 20 30 Grafisk notation för par Grafisk notation för par (define x (cons 10 (cons 20 30))) x 10 20 30 (define x (cons (cons 10 40) (cons 20 30))) x 10 40 20 30 Varje anrop till CONS skapar ett par

Listor i Scheme En lista i Scheme är antingen n en ordnad sekvens av element, eller n en tom lista utan några element Konstruktion av listor Konstruktion: tomma listan skapas med hjälp av (). Andra listor skapas med hjälp av en ordnad sekvens av par, där sista parets cdr-del är () Selektion: first och rest Igenkänning och jämförelse: list? Förändring av delar (kapitel 3 SICP, fö 7-9) Presentation eller utskrivning Konstruktion av listor Konstruktion: tomma listan skapas med hjälp av uttrycket () Andra listor skapas med hjälp av en ordnad sekvens av par, där car-delen av varje par innehåller ett element ur listan och cdr-delen innehåller resten av listan Sista parets cdr-del är () Exempel på listkonstruktion (cons 1 (cons 2 (cons 3 ()))) Skapar listan (1 2 3) proceduren LIST (list 1 2 3) är en förkortning för (cons 1 (cons 2 (cons 3 ()))) Ekvivalenta listor (cons e1 (cons e2 (cons (cons en ())))) (list e1 e2 en) (e1 e2 en)

Ekvivalenta listor Ej ekvivalenta listor (list 1 2 3 4) (1 2 3 4) (list e1 e2 en) (e1 e2 en) Listor i Racket I Racket skrivs listor ut så här: '(1 2 3) '(0 1 1 2 3) '(6 28) Samma element men olika strukturer Följande strukturer är olika: (list 'a 'b 'c) (cons 'a (cons b c)) Den första skapar en lista medan den andra skapar en godtyckligt consstruktur. Har vi en lista: null? eller list? null? testar om vi har en tom lista list? testar om vi har en lista (null? ()) är #t (list? ()) är #t (null? (list 1 2)) är #f (list? (list 1 2) är #t Jämför listor Använd eqv? för att testa huruvida två listor är samma Använd equal? för att testa huruvida två listor innehåller samma element

Grafisk notation för listor Grafisk notation för listor - generellt Tomma listan: () Lista med 1 element: (list 10) 10 () En lista som innehåller ett eller flera element representeras av en följd av CONS-celler enligt: 2 elements: (list 10 20) 10 20 () e1 e2... en () OBS! Listor kan innehålla listor (null? (list ())) är #f () () (list ()) är samma sak som (cons () ()) ((1 2) (a (b) c)) () 1 2 () a c () b () Listor kan innehålla listor ((1 2) (a (b) c)) () Toppnivån Dellistor CONS-celler kan pekas ut från olika håll (define pair (cons 1 2)) (define pairpair (cons pair pair)) pairpair 1 2 () a c () Del av en del b () pair 1 2

CONS-celler kan pekas ut från olika håll (define pair (cons 1 2)) (define pairpair (cons pair pair)) (define metoo pair) pairpair CONS-celler kan pekas ut från olika håll (define pair (cons 1 2)) (define pairpair (cons pair pair)) (define metoo pair) (define andme (cons pairpair metoo)) pairpair pair metoo andme pair metoo 1 2 1 2 Utskrivning i Racket OBS! Par (eller CONS-lådor) skrivs ut i punktnotationen: (cons 1 2) som (1. 2) (cons (cons 1 2) (cons 3 4)) som ((1. 2) 3. 4) (cons 1 (cons 2 ())) som (1 2) Punktnotationen förvånar oss ibland, men det är bara acceptera att det är så :) (cons (cons 1 2) (cons 3 4)) skrivs ut som ((1. 2) 3. 4) och inte som man eventuellt tror ((1. 2). (3. 4)) Listor - Utskrivning i Racket Listor skrivs ut av Racket enligt följande exempel: () (1 2 3) (0 1 1 2 3) (6 (28 (486))) Sekvenser och Listor Med lista och sekvens menar vi ofta samma sak, men vi väljer att skilja på dem något i fall tvetydlighet uppstår När alla elementen i en lista betraktas och behandlas på samma sätt säger vi att vi jobbar med en sekvens. När vissa element i listan är dellistor och skall behandlas på annat sätt än element som inte är dellistor då föredrar vi att inte kalla denna lista för en sekvens utan en lista

Exempel på listhanteringsprogram Beräkna längden av en sekvens Sätt ihop två sekvenser Vänd på en sekvens Ersätt förekomster av ett element med ett annat i en sekvens eller lista Programmönster: #1 jobba med sekvenser Två fall: Sekvensen är tom: () Sekvensen ej tom: (a b c) Programmönster: #1 (DEFINE (FN SEQ) (IF (NULL? SEQ) <null-result> (<operation> (FN (REST SEQ))))) Programmönster: #1 (DEFINE (FN SEQ) (IF (NULL? SEQ) <null-result> (<operation> (FN (CDR SEQ))))) (define (square-all seq) (if (null? seq) () (cons (square (first seq)) (square-all (rest seq))))) (define (satt-ihop seq-1 seq-2) (if (null? seq-1) seq-2 (cons (first seq-1) (satt-ihop (rest seq-1) seq-2)))) Programmönster: #1i Iterativt hantering av sekvenser (DEFINE (FN SEQ) (DEFINE (ITER SEQ RESULT) (IF (NULL? SEQ) RESULT (ITER (CDR SEQ) (accum RESULT)))) (ITER SEQ <null-result>)) (define (sum-seq seq) (define (iter seq result) (if (null? seq) result (iter (rest seq) (+ result (first seq))))) (iter seq 0)) Programmönster: #2 jobba med sekvenser Tre fall: Sekvensen är tom: () Sekvensen börjar med ett element som uppfyller ett villkor: (2 a b) Sekvensen börjar med ett element som inte uppfyller ett villkor: (a 2 c) Det kan bli flera fall i fall vi har flera olika villkor, men fortfarande samma struktur i

Programmönster: #2 Listor som sekvenser Exempel: ingår e i seq? (DEFINE (FN SEQ) (COND ((NULL? SEQ) <null-result>) (<condition> <result>) (ELSE (<operation> (FN (CDR SEQ)))))) (define (element? e seq) (cond ((null? Seq) #f) ((eqv? e (car seq)) #t) (else (element? e (cdr seq))))) Programmönster: #2 Listor som sekvenser. Ersätt förekomster av OLD med NEW i en lista (define (replace seq old new) (cond ((null? seq) ()) ((eq? (first seq) old) (cons new (replace (rest seq) old new))) (else (cons (first seq) (replace (rest seq) old new)))))) Programmönster: #2 Listor som sekvenser. Denna lösning är i princip samma som förra (define (replace seq old new) (if (null? seq) () (cons (if (eq? (first seq) old) new (first seq)) (replace (rest seq) old new)))) Programmönster: #2 Listor som sekvenser. (define (get-position el seq) (define (helper seq k) (cond ((null? seq) -1) ((eq? el (car seq)) k) (else (helper (cdr seq) (+ k 1))))) (helper seq 0)) Programmönster: #2 Listor som sekvenser. (define (merge seq1 seq2) (cond ((null? seq1) seq2) ((null? seq2) seq1) ((< (first seq1) (first seq2)) (cons (first seq1) (merge (rest seq1) seq2))) (else (cons (first seq2) (merge (rest seq1) seq2))))) Programmönster: #3 listor där elementen är listor Vanligtvis har vi 3 fall: Tom lista: () Första elementet ej lista: (a (b c) (d)) Generella fallet: ((a b) (b c) (d))

#3 exempel: summan av tal i lista med dellistor (define (sum lol) (cond ((null? lol) 0) ((number? (first lol)) (+ (first lol) (sum (rest lol)))) (else (+ (sum (first lol)) (sum (rest lol))))))