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

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

Idag: Dataabstraktion

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)

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?

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

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

I dag: Blockstruktur, omgivningar, problemlösning

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

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

Datalogi, grundkurs 1

TDDC74 Lab 02 Listor, sammansatta strukturer

Datalogi, grundkurs 1

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

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

Föreläsning 9 Exempel

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

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

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Sökning och sortering

Idag: Dataabstraktion

TDDC74 - Lektionsmaterial C

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

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

Tentamen i. TDDA 69 Data och programstrukturer

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

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

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

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

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

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

Rekursiva algoritmer sortering sökning mönstermatchning

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

Funktionell programmering DD1361

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Några saker till och lite om snabbare sortering

Uppgift 6A - Frekvenstabell

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

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

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

Procedurer och villkor

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

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

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

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

Programmering II (ID1019) :00-11:00

Datalogi, grundkurs 1

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

I ett program hantera man ofta samlingar av objekt av samma typ.

DD1361 Programmeringsparadigm. Carina Edlund

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

Tentamen *:58/ID100V Programmering i C Exempel 3

Sista delen av kursen

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

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å

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

Förra gången: Primitiva data

Introduktion till programmering SMD180. Föreläsning 8: Listor

Sista delen av kursen

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

Datalogi för E Övning 3

Tentamen i Grundläggande Programvaruutveckling, TDA548

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Uppgift 4A - Definition av enkla funktioner

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

Programkonstruktion och Datastrukturer

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

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

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.

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Transkript:

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

Idag: Par och listor Hur hanterar man icke-numeriska problem? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29

Idag: Par och listor Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29

Idag: Par och listor Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? Hur konstruerar man sammansatta datastrukturer? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29

Idag: Par och listor Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? Hur konstruerar man sammansatta datastrukturer? Bra om du har läst följande avsnitt 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 6) Datalogi 1 Hösten 2010 1 / 29

Symboler Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. > (define namn1 Kalle) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 2 / 29

Symboler Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. > (define namn1 Kalle) > namn1 Kalle > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 2 / 29

Symboler Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. > (define namn1 Kalle) > namn1 Kalle > (define adress1 Lindstedtsvagen3) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 2 / 29

Symboler Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. > (define namn1 Kalle) > namn1 Kalle > (define adress1 Lindstedtsvagen3) > adress1 Lindstedtsvagen3 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 2 / 29

Symboler... skiljer på gemener och versaler i symboler. > (eq? Kalle kalle) #f > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 3 / 29

Symboler... skiljer på gemener och versaler i symboler. > (eq? Kalle kalle) #f > (eq? kalle kalle) #t DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 3 / 29

Symboler... skiljer på gemener och versaler i symboler. > (eq? Kalle kalle) #f > (eq? kalle kalle) #t Predikatet eq? testar om två symboler är lika. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 3 / 29

Symboler... skiljer på gemener och versaler i symboler. > (eq? Kalle kalle) #f > (eq? kalle kalle) #t Predikatet eq? testar om två symboler är lika. Använd inte predikatet =, det duger bara till numerisk jämförelse. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 3 / 29

Symboler... skiljer på gemener och versaler i symboler. > (eq? Kalle kalle) #f > (eq? kalle kalle) #t Predikatet eq? testar om två symboler är lika. Använd inte predikatet =, det duger bara till numerisk jämförelse. Använd inte heller mellanslag eller någon av symbolerna ( ) [ ] { } ;, # \ i symbolnamnen. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 3 / 29

Symboler... Alternativt kan man använda textsträngar (define address Lindstedtsvägen 3 ) Stränghantering är långsammare än symbolhantering, men man kan använda alla tecken i strängarna. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 4 / 29

Listor I många situationer har man behov av listor, t.ex. shoppinglistor, namnlistor, adresslistor, tidtabeller,... > (define namelist (kalle pelle lasse)) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 5 / 29

Listor I många situationer har man behov av listor, t.ex. shoppinglistor, namnlistor, adresslistor, tidtabeller,... > (define namelist (kalle pelle lasse)) > namelist (kalle pelle lasse) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 5 / 29

Listor I många situationer har man behov av listor, t.ex. shoppinglistor, namnlistor, adresslistor, tidtabeller,... > (define namelist (kalle pelle lasse)) > namelist (kalle pelle lasse) > (define numberlist (1 2 3 4 5)) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 5 / 29

Listor I många situationer har man behov av listor, t.ex. shoppinglistor, namnlistor, adresslistor, tidtabeller,... > (define namelist (kalle pelle lasse)) > namelist (kalle pelle lasse) > (define numberlist (1 2 3 4 5)) > numberlist (1 2 3 4 5) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 5 / 29

Listor... I kallar man tal, symboler, och listor för objekt. Tal och symboler kallas för atomära objekt medan listor kallas för sammansatta objekt. En lista kan konstrueras med hjälp av proceduren list: >(list kalle pelle lasse) (kalle pelle lasse) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 6 / 29

Listor... I kallar man tal, symboler, och listor för objekt. Tal och symboler kallas för atomära objekt medan listor kallas för sammansatta objekt. En lista kan konstrueras med hjälp av proceduren list: >(list kalle pelle lasse) (kalle pelle lasse) eller med proceduren cons: >(cons kalle (pelle lasse)) (kalle pelle lasse) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 6 / 29

Listor... Lägg märke till att proceduren list tar ett godtyckligt antal listelement som argument medan proceduren cons tar ett listelement och en lista som argument. Proceduren car används för att hämta det första elementet i en lista: > (define namelist (kalle pelle lasse)) > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 7 / 29

Listor... Lägg märke till att proceduren list tar ett godtyckligt antal listelement som argument medan proceduren cons tar ett listelement och en lista som argument. Proceduren car används för att hämta det första elementet i en lista: > (define namelist (kalle pelle lasse)) > (car namelist) kalle > DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 7 / 29

Listor... Lägg märke till att proceduren list tar ett godtyckligt antal listelement som argument medan proceduren cons tar ett listelement och en lista som argument. Proceduren car används för att hämta det första elementet i en lista: > (define namelist (kalle pelle lasse)) > (car namelist) kalle > namelist (kalle pelle lasse) namelist är oförändrad efter anropet av car! DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 7 / 29

Listor... Proceduren cdr används för att hämta ut resten av listan (d.v.s. listan utan det första elementet): > (cdr namelist) (pelle lasse) car och cdr används ofta tillsammans för att hantera listor. Om vi t.ex. vill hämta ut det n:te elementet i en lista: (define nth-element (lambda (n a-list) (if (= n 1) (car a-list) (nth-element (- n 1) (cdr a-list))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 8 / 29

Listor... Testa även att argumentet är en lista och att listan har minst n element: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 9 / 29

Listor... Testa även att argumentet är en lista och att listan har minst n element: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) ((null? a-list) ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 9 / 29

Listor... Testa även att argumentet är en lista och att listan har minst n element: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) ((null? a-list) ()) ((<= n 0) ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 9 / 29

Listor... Testa även att argumentet är en lista och att listan har minst n element: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) ((null? a-list) ()) ((<= n 0) ()) ((= n 1) (car a-list)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 9 / 29

Listor... Testa även att argumentet är en lista och att listan har minst n element: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) ((null? a-list) ()) ((<= n 0) ()) ((= n 1) (car a-list)) (else (nth-element (- n 1) (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 9 / 29

Listor... Men det är onödigt att testa varje anrop: (define nth-element (lambda (n a-list) (cond ((not (list? a-list)) ()) ((null? a-list) ()) ((<= n 0) ()) (else (inner n a-list))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 10 / 29

Listor... Men det är onödigt att testa varje anrop: (define nth-element (lambda (n a-list) (define inner (lambda (n a-list) (if (= n 1) (car a-list) (inner (- n 1) (cdr a-list))))) (cond ((not (list? a-list)) ()) ((null? a-list) ()) ((<= n 0) ()) (else (inner n a-list))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 10 / 29

Mer om par och listor Axiom: x = (car (cons x y)) y = (cdr (cons x y)) (cons 1 2) bildar ett par (1. 2) som med pilar och boxar ser ut så här: 2 1 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 11 / 29

Mer om par och listor... cons? car? cdr? Man realiserade språket LISP först på en dator av modellen IBM704. Fantasin tröt lite och man använde datorminnets namn på datorord-delar. Ett dator- ord i IBM704 var 36 bitar långt och bestod av fyra delar (längden i bitar inom parentes): Address Register (15), Decrement Register (15), Prefix Register (3), Tag Register (3) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 12 / 29

Mer om par och listor... cons? car? cdr? Man realiserade språket LISP först på en dator av modellen IBM704. Fantasin tröt lite och man använde datorminnets namn på datorord-delar. Ett dator- ord i IBM704 var 36 bitar långt och bestod av fyra delar (längden i bitar inom parentes): Address Register (15), Decrement Register (15), Prefix Register (3), Tag Register (3) car = Contents of address register DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 12 / 29

Mer om par och listor... cons? car? cdr? Man realiserade språket LISP först på en dator av modellen IBM704. Fantasin tröt lite och man använde datorminnets namn på datorord-delar. Ett dator- ord i IBM704 var 36 bitar långt och bestod av fyra delar (längden i bitar inom parentes): Address Register (15), Decrement Register (15), Prefix Register (3), Tag Register (3) car = Contents of address register cdr = Contents of decrement register DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 12 / 29

Mer om par och listor... cons? car? cdr? Man realiserade språket LISP först på en dator av modellen IBM704. Fantasin tröt lite och man använde datorminnets namn på datorord-delar. Ett dator- ord i IBM704 var 36 bitar långt och bestod av fyra delar (längden i bitar inom parentes): Address Register (15), Decrement Register (15), Prefix Register (3), Tag Register (3) car = Contents of address register cdr = Contents of decrement register cons = Construct (lägg in data i ett register) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 12 / 29

Mer om par och listor... I en lista är sista referensen alltid () (inget objekt) (cons 1 ()) (1) ger en lista med 1 element. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 13 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) (1 2 3) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) (1 2 3) ger en lista med 3 element DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) (1 2 3) ger en lista med 3 element 1 2 3 (car (cons 1 (cons 2 (cons 3 ())))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) (1 2 3) ger en lista med 3 element 1 2 3 (car (cons 1 (cons 2 (cons 3 ())))) 1 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... (cons 1 (cons 2 (cons 3 ()))) (1 2 3) ger en lista med 3 element 1 2 3 (car (cons 1 (cons 2 (cons 3 ())))) 1 Så ser ingen skillnad mellan en lista och en sekvens av par med sista referensen (= ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 14 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) > (car (cdr (1 2 3))) 2 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) > (car (cdr (1 2 3))) 2 > (cadr (1 2 3)) 2 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) > (car (cdr (1 2 3))) 2 > (cadr (1 2 3)) 2 > (cddr (1 2 3)) (3) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) > (car (cdr (1 2 3))) 2 > (cadr (1 2 3)) 2 > (cddr (1 2 3)) (3) > (caddr (1 2 3)) 3 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... > (cdr (1 2 3)) (2 3) > (car (cdr (1 2 3))) 2 > (cadr (1 2 3)) 2 > (cddr (1 2 3)) (3) > (caddr (1 2 3)) 3 > (cdddr (1 2 3)) () DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 15 / 29

Mer om par och listor... I stället för (cons 1 (cons 2 (cons 3 ()))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 16 / 29

Mer om par och listor... I stället för (cons 1 (cons 2 (cons 3 ()))) kan man skriva (list 1 2 3) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 16 / 29

Mer om par och listor... Betrakta följande (cons (cons 1 2) (cons 3 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 17 / 29

Mer om par och listor... Betrakta följande (cons (cons 1 2) (cons 3 4)) skrivs av schemesystemet som ((1. 2). (3. 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 17 / 29

Mer om par och listor... Betrakta följande (cons (cons 1 2) (cons 3 4)) skrivs av schemesystemet som ((1. 2). (3. 4)) och representeras av pil-box-diagrammet 4 2 3 1 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 17 / 29

Mer om par och listor... (cons (cons 1 (cons 2 3)) 4) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 18 / 29

Mer om par och listor... (cons (cons 1 (cons 2 3)) 4) skrivs av schemesystemet som ((1 2. 3). 4) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 18 / 29

Mer om par och listor... (cons (cons 1 (cons 2 3)) 4) skrivs av schemesystemet som ((1 2. 3). 4) och representeras av pil-box-diagrammet 4 3 1 2 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 18 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) där förhindrar evaluering. DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) där förhindrar evaluering. Man kan sätta ihop dem på alla möjliga sätt också > (cons (list 1 2) (list 3 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) där förhindrar evaluering. Man kan sätta ihop dem på alla möjliga sätt också > (cons (list 1 2) (list 3 4)) ((1 2). (3 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) där förhindrar evaluering. Man kan sätta ihop dem på alla möjliga sätt också > (cons (list 1 2) (list 3 4)) ((1 2). (3 4)) > (list (list 1 2) (list 3 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... En lista av elementen 1, 2, 3 och 4 kan göras på följande sätt: (list 1 2 3 4) eller (1 2 3 4) där förhindrar evaluering. Man kan sätta ihop dem på alla möjliga sätt också > (cons (list 1 2) (list 3 4)) ((1 2). (3 4)) > (list (list 1 2) (list 3 4)) ((1 2) (3 4)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 19 / 29

Mer om par och listor... > (define x (1 2 3)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Mer om par och listor... > (define x (1 2 3)) > (cons 0 x) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Mer om par och listor... > (define x (1 2 3)) > (cons 0 x) > (cons x 0) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Mer om par och listor... > (define x (1 2 3)) > (cons 0 x) > (cons x 0) > (cons 1 (cons 2 ())) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Mer om par och listor... > (define x (1 2 3)) > (cons 0 x) > (cons x 0) > (cons 1 (cons 2 ())) > (cons 1 (list 2)) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Mer om par och listor... > (define x (1 2 3)) > (cons 0 x) > (cons x 0) > (cons 1 (cons 2 ())) > (cons 1 (list 2)) > (list 1 2) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 20 / 29

Procedurer som opererar på listor Längden på en lista (define length (lambda (a-list) (if (null? a-list) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 21 / 29

Procedurer som opererar på listor Längden på en lista (define length (lambda (a-list) (if (null? a-list) 0 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 21 / 29

Procedurer som opererar på listor Längden på en lista (define length (lambda (a-list) (if (null? a-list) 0 (+ 1 (length (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 21 / 29

Procedurer som opererar på listor Sätt in ett nytt element sist i en lista (define append-element (lambda (x a-list) (if (null? a-list) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 22 / 29

Procedurer som opererar på listor Sätt in ett nytt element sist i en lista (define append-element (lambda (x a-list) (if (null? a-list) (cons x ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 22 / 29

Procedurer som opererar på listor Sätt in ett nytt element sist i en lista (define append-element (lambda (x a-list) (if (null? a-list) (cons x ()) (cons (car a-list) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 22 / 29

Procedurer som opererar på listor Sätt in ett nytt element sist i en lista (define append-element (lambda (x a-list) (if (null? a-list) (cons x ()) (cons (car a-list) (append-element x (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 22 / 29

Slå ihop två listor Procedurer som opererar på listor (define append (lambda (x y) (if (null? x) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 23 / 29

Slå ihop två listor Procedurer som opererar på listor (define append (lambda (x y) (if (null? x) y DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 23 / 29

Slå ihop två listor Procedurer som opererar på listor (define append (lambda (x y) (if (null? x) y (cons (car x) (append (cdr x) y))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 23 / 29

Procedurer som opererar på listor Addera alla tal i en lista (med bara tal i) (define add-items (lambda (a-list) (if (null? a-list) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 24 / 29

Procedurer som opererar på listor Addera alla tal i en lista (med bara tal i) (define add-items (lambda (a-list) (if (null? a-list) 0 DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 24 / 29

Procedurer som opererar på listor Addera alla tal i en lista (med bara tal i) (define add-items (lambda (a-list) (if (null? a-list) 0 (+ (car a-list) (add-items (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 24 / 29

Procedurer som opererar på listor Gör en lista med n kopior av elementet element (define repeat (lambda (n element) (if (= n 0) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 25 / 29

Procedurer som opererar på listor Gör en lista med n kopior av elementet element (define repeat (lambda (n element) (if (= n 0) () DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 25 / 29

Procedurer som opererar på listor Gör en lista med n kopior av elementet element (define repeat (lambda (n element) (if (= n 0) () (cons element (repeat (- n 1) element))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 25 / 29

Procedurer som opererar på listor Dubblera värdet av alla element i en lista (define double-all (lambda (a-list) (if (null? a-list) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 26 / 29

Procedurer som opererar på listor Dubblera värdet av alla element i en lista (define double-all (lambda (a-list) (if (null? a-list) () DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 26 / 29

Procedurer som opererar på listor Dubblera värdet av alla element i en lista (define double-all (lambda (a-list) (if (null? a-list) () (cons (* 2 (car a-list)) (double-all (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 26 / 29

Procedurer som opererar på listor Ta bort alla förekomster av ett element i en lista (define delete (lambda (element a-list) (cond ((null? a-list) ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 27 / 29

Procedurer som opererar på listor Ta bort alla förekomster av ett element i en lista (define delete (lambda (element a-list) (cond ((null? a-list) ()) ((= element (car a-list)) (delete element (cdr a-list))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 27 / 29

Procedurer som opererar på listor Ta bort alla förekomster av ett element i en lista (define delete (lambda (element a-list) (cond ((null? a-list) ()) ((= element (car a-list)) (delete element (cdr a-list))) (else (cons (car a-list) (delete element (cdr a-list))))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 27 / 29

Filtrera en lista Procedurer som opererar på listor >(filter even? (1 2 3 4 5 6)) (2 4 6) (define filter (lambda (p? a-list) (cond ((null? a-list) ()) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 28 / 29

Filtrera en lista Procedurer som opererar på listor >(filter even? (1 2 3 4 5 6)) (2 4 6) (define filter (lambda (p? a-list) (cond ((null? a-list) ()) ((p? (car a-list)) (cons (car a-list) (filter p? (cdr a-list)))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 28 / 29

Filtrera en lista Procedurer som opererar på listor >(filter even? (1 2 3 4 5 6)) (2 4 6) (define filter (lambda (p? a-list) (cond ((null? a-list) ()) ((p? (car a-list)) (cons (car a-list) (filter p? (cdr a-list)))) (else (filter p? (cdr a-list)))))) DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 28 / 29

Procedurer som opererar på listor Nästa gång: Datarepresentation Om vi hittar på en representation för t.ex. rationella tal, kanske lagrar dem som talpar, och programmerar upp en mängd operationer för att manipulera dem vad händer om vi ändrar representationen? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 29 / 29

Procedurer som opererar på listor Nästa gång: Datarepresentation Om vi hittar på en representation för t.ex. rationella tal, kanske lagrar dem som talpar, och programmerar upp en mängd operationer för att manipulera dem vad händer om vi ändrar representationen? Kan vi vara smarta? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 29 / 29