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



Relevanta dokument
TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering DUGGA 3

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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 Tenta, kl 14 18, 11 juni 2014

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

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 Tentamen, onsdag 9 juni 2016, kl 14 18

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

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

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

Tentamen i. TDDA 69 Data och programstrukturer

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

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

TDDC74 - Lektionsmaterial C

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

Föreläsning 9 Exempel

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

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

TDDC74 Lab 02 Listor, sammansatta strukturer

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

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

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

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

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

Datalogi, grundkurs 1

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

Uppgift 6A - Frekvenstabell

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

Idag: Dataabstraktion

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 Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

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

Datalogi, grundkurs 1

Sökning och sortering

(define x (list (list a b) c d)) Förändringsbar data (muteringsbar data?, eng. mutable data) (define y (list e f))

Objektorienterad programmering i Racket

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

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

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

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

Länkade strukturer. (del 2)

Rekursiva algoritmer sortering sökning mönstermatchning

Objektorienterad programmering i Racket

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

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Sista delen av kursen

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

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

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

Några saker till och lite om snabbare sortering

Föreläsning 8: Exempel och problemlösning

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning Datastrukturer (DAT037)

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Idag: Dataabstraktion

Föreläsning Datastrukturer (DAT036)

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Tentamen EDAF30 Programmering i C++

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

Föreläsning 7 Datastrukturer (DAT037)

Objektorienterad Programmering (OOP) Murach s: kap 12-16

TDDE44 Programmering, grundkurs

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning Datastrukturer (DAT036)

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

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

Poster... Poster. Poster... Poster...

Föreläsning Datastrukturer (DAT036)

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

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

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Transkript:

TDDC74 Programmering: abstraktion och modellering Ändringsbar (mutable comound) data Att göra strukturförändringar i listor Ändra car- och cdr-ekare SICP 3 (del ) Föreläsning 8 Anders Haraldsson (set-car! cons-cell new-value) (set-cdr! cons-cell new-value) Ändring av car res cdr-delen i conscellen Sätta - samman listor koiering 3 (define (a b c)) ec n (set-car! x) ex ec n => (x b c) (set-cdr! (cddr )) => (x c) ex ec n 4 start ny slut (define (aend L L) (if (null? L) L (cons (car L) (aend (cdr L) L)))) ex ey (define start (a b)) (define slut (x y)) (define ny (aend start slut)) start => (a b) slut => (x y) ny => (a b x y) Sätta - samman listor ekarändring Hitta sista cons-cellen start ny slut ex ey (define start (a b)) (define slut (x y)) (define (last l) ; L är ej tom (if (null? (cdr l)) l (last (cdr l)))) 5 (define (aend! L L) (if (null? L) L (begin (set-cdr! (last L) L) L))) (define ny (aend! start slut)) start => (a b x y) slut => (x y) ny => (a b x y) 6

Pekarändringar svårt att se konsekvenser Cirkulär lista (define x (a b c)) (define y (d e)) (set-car! x y) (set-cdr! y f) (define z (cons (cdr x) (cdr x))) z ->? > (define circ (a b c)) (set-cdr! (last circ) circ) circ circ ec n (a b c a b c a b c a b.. 7 z = ((b c) b c) 8 ; Dr Scheme kontrollerar cirkularitet / delade strukturer > circ #0=(a b c. #0#) Pekarlikhet identiskt objekt Antalet cons-celler eq? testar om x and y är samma objekt (lika ekare) (list a b) = (cons a (cons b )) Kan användas för att undersöka om ekare anger samma objekt, t ex cons-cell. Man kan undersöka om man har delad struktur. (define (let ((cons-cell (cons a ))) (cons cons-cell (cons cons-cell )))) => ((a) (a)) e e e e a 9 0 (eq? (car ) (car (cdr ))) =? (eq? (car ) (car (cdr ))) =? Delade strukturer Definiera en funktion som räknar antalet olika ar i en liststruktur. Delade strukturer Räkna antalet ar oavsett delning: (define (count-airs-no-sharing lst) (if (not (air? lst)) 0 (+ (count-airs-no-sharing (car lst)) (count-airs-no-sharing (cdr lst)) )))

3 Delning rita boxar (count-airs '(a b c)) ->? (let ((air '(x. y))) (count-airs (cons air (cons air ')))) ->? (let ((l '(a b c))) (count-airs (cons l l))) ->? (let ((air '(x. y))) (set-cdr! air air) (count-airs air)) ->? 4 Delning korrekt räknande Måste komma ihåg alla cons-cller som tidigare räknats. Lägg dem i en lista. (define (count-airs lst) (let ((visited-cells ')) (define (count-airs-hl lst) (cond ((not (air? lst)) 0) ((memq lst visited-cells) 0) ; alrdy counted (else (begin (set! visited-cells (cons lst visited-cells)) (+ (count-airs-hl (car lst)) (count-airs-hl (cdr lst))))))) (count-airs-hl lst))) Skaa ny tyer av abstrakta datatyer Konstruktor Selektorer Ändrare (Mutators, sk!-rocedurer) Igenkännare In- och utmatning Nu kan vi använda tilldelning och strukturändrande funktioner (set-car! och set-cdr!) Skaa kö som en ADT En kö är en sekvens med element. Nya element kan läggas till i slutet av kön. Element från kön tas bort från början. 5 6 Primitiver för en kö (queue) Kö 7 make-queue: -> queue emty-queue?: queue -> bool front-queue: queue -> item insert-queue!: item x queue -> queue delete-queue!: queue -> queue rint-queue: queue -> 8 (insert-queue! kalle bank-queue) (insert-queue! stina bank-queue) (front-queue bank-queue) => kalle (delete-queue! bank-queue) (insert-queue! lisa bank-queue) (insert-queue! eva bank-queue) (front-queue bank-queue) => stina (delete-queue! bank-queue) (rint-queue bank-queue) lisa eva

Kö reresentation Inför ett köhuvud För att få en snabb åtkomst I båda ändarna car-delen i köhuvudet anger början av kön cdr-delen i köhuvudet anger slutet av kön e Köhuvudet Kö reresentation Tom kö Kö med ett element e e eb c 9 Början av kön Slutert av kön 0 (define (make-queue) (cons ' ')) (define (emty-queue? queue) (null? (car queue))) (define (front-queue queue) (if (emty-queue? queue) (error "FRONT called with an emty queue" queue) (car (car queue)))) (define (insert-queue! Item queue) (let ((new-air (cons item '))) (cond ((emty-queue? queue) (set-car! queue new-air) queue) (else (set-cdr! (cdr queue) new-air) queue)))) (define (delete-queue! queue) (cond ((emty-queue? queue) (error "DELETE! called with an emty queue" queue)) (else (set-car! queue (cdr (car queue))) (if (emty-queue? queue) (set-cdr! queue )) queue))) Objektorienterad aketering av kön (define (make-queue) ; new version (let ((queue (cons )) (define (emty?) (null? (car queue))) (define (front) (car (car queue))) 3 4

Objektorienterad aketering av kön Objektorienterad aketering av kön 5 (define (make-queue) ; new version, cont (define (insert! item) (let ((new-air (cons item '))) (cond ((emty?) (set-car! queue new-air) queue) (else (set-cdr! (cdr queue) new-air) queue)))) (define (delete!). ) (define (rint). ) 6 (define (make-queue) ; new version, cont (define (disatch m) (cond ((eq? m emty) emty?) ((eq? m insert) (lambda (item) (insert! item))) ((eq? m front) front) ((eq? m delete) delete!) ((eq? m rint) rint) (else (error Unknown request m)))) disatch) Användning av objektorienteringen Kön funktionsorienterad anrosyntax 7 ((bank-queue insert) kalle) ((bank-queue insert) stina) ((bank-queue front)) => kalle ((bank-queue delete)) ((bank-queue insert) lisa) ((bank-queue insert) eva) ((bank-queue front)) => stina ((bank-queue delete)) (bank-queue rint)) lisa eva 8 (define (insert-queue! item queue-roc) ((queue-roc insert) item)) > (insert-queue! kalle bank-queue) (define (front-queue queue-roc) ((queue-roc front))) > (front-queue bank-queue) (define (delete-queue! queue-roc) ((queue-roc delete))) > (delete-queue! bank-queue) Kön som objekt version (define (make-queue) (define (disatch m. args) (cond ((eq? m emty) (emty?)) ((eq? m insert) (insert! (car args)))) ((eq? m front) (front)) ((eq? m delete) (delete!)) ((eq? m rint) (rint)) (else (error Unknown request m)))) disatch) 9 (bank-queue insert kalle) (bank-queue front) => kalle (bank-queue delete) ; rocedur