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

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

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

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

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

Uppgift 4A - Definition av enkla funktioner

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

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

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

Uppgift 6A - Frekvenstabell

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.

LABORATION 1. Inledande Lisp - rekursion

TDDC74 Programmering, abstraktion och modellering DUGGA 3

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

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

TDDC74 Programmering: Abstraktion och modellering Datortenta

Rekursiva algoritmer sortering sökning mönstermatchning

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Komma igång med Allegro Common Lisp

Tentamen Grundläggande programmering

F5: Högnivåprogrammering

F5: Högnivåprogrammering

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

TDDC77 Objektorienterad Programmering

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

Föreläsning 3-4 Innehåll

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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?

Parameteröverföring. Exempel. Exempel. Metodkropp

TDIU01 - Programmering i C++, grundkurs

Enkla datatyper minne

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

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

TDDC74 - Lektionsmaterial C

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

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

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

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

DD1361 Programmeringsparadigm. Carina Edlund

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Statistik över heltal

Objektorienterad Programmering (TDDC77)

Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9

i LabVIEW. Några programmeringstekniska grundbegrepp

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

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

Planering Programmering grundkurs HI1024 HT TIDAA

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

Funktionell programmering DD1361

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Tommy Färnqvist, IDA, Linköpings universitet

Övning från förra gången: readword

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

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

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

Objektorienterad programmering

Planering Programmering grundkurs HI1024 HT data

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

Föreläsning 2, vecka 8: Repetition

Objektorienterad Programmering (TDDC77)

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

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

5 Grundläggande in- och utmatning

Objektorienterad programmering i Java

Föreläsning 5: Introduktion av pekare

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Föreläsning 6 pekare och pekare tillsammans med arrayer

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

Transkript:

21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse Common Lisp Konstanter, parametrar, globala variabler (avs 14.2) Parameterlistor (avs 14.4) Flervärda funktioner (avs 14.5)

21-1-2 2 Intern struktur Lispsystem runtimesystem kompilerad kod stack interpretator eval/apply grundläggande primitiver i/o filhantering program bindningar parametrar /lokala variabler och värden listor program och data symboler tal arraystrukturer...

21-1-2 3 CL-USER(1): (room t)... code type items bytes 126: (SIMPLE-ARRAY (UNSIGNED-BYTE 16)) 1767 21534 112: (SIMPLE-ARRAY T) 27822 1755224 1: CONS 8723 68344 7: SYMBOL 1423 621536 8: FUNCTION 265 574776 12: (SIMPLE-ARRAY FIXNUM) 258 266264 117: (SIMPLE-ARRAY CHARACTER) 2783 158184 : CLOSURE 557 314 125: (SIMPLE-ARRAY (UNSIGNED-BYTE 8)) 15 8234 18: (SHORT-SIMPLE-ARRAY CODE) 228 686 12: STANDARD-INSTANCE 3737 572 15: STRUCTURE 4 3684 127: (SIMPLE-ARRAY (UNSIGNED-BYTE 32)) 11 1286 135: SYMBOL-LOCATIVE 32 1528 1: HASH-TABLE 12 576 18: BIGNUM 418 548 17: DOUBLE-FLOAT 127 232 111: (SHORT-SIMPLE-ARRAY FOREIGN) 6 14 16: SINGLE-FLOAT 186 1488 13: MV-VECTOR 13 1144 1: RATIO 32 512 118: (SIMPLE-ARRAY BIT) 12 32 2: COMPLEX 11 176 8: (ARRAY T) 7 168 11: READTABLE 1 16 123: (SIMPLE-ARRAY (SIGNED-BYTE 32)) 1 88 6: (SHORT-SIMPLE-ARRAY T) 4 64 13: SYSVECTOR 4 64 85: (ARRAY CHARACTER) 1 24 75: SHORT-ARRAY 1 24 total bytes = 661264...

21-1-2 4 Pekare Adress till minnesutrymme Ett minnesutrymme innehåller antingen själva dataobjektets värde, t ex ett tal eller en pekare till ett annat minnesutrymme. typ pekare Typ anger datatypen (i Lisp s mening) på det objekt pekaren anger. Vi har tidigare i samband med cons-celler ritat en pil för att ange en pekare. en cons-cell symbolen kalle

21-1-2 5 olen a får globala värdet kalle Symbol En symbol är unik (relativt ett paket) En symbol kan ses som en post som innehåller bl a symbolen kalle kalle 1 (lambda (x)..) pname globalt funktions- egenskapsprintname värde definition lista Symbolposterna lagras i en tabell (area) och stränagarna i en strängarea symboltabell strängarea 11 12 a 13 14 15 car 16 17 18 1 11 111 kalle append

21-1-2 6 Tal små tal pekare 35 dataobjekt stora tal 123...78 123......78 lämplig uppdelning av talet flyttal exp mantissa bråk 3/5 heltalet 3 heltalet 5

21-1-2 7 I minnet finns data heltal representeras i det binära talsystemet 1 1 1 1 1 128=2 7 64 32 16 8 4 2=2 1 1 =2 128+32+16+4+1 = 181 1 = 11111 2 = B5 16 Det hexadecimala talsystemet har 16 som bas med siffrorna till och A tom F. Negativa tal kan representeras på olika sätt. Första biten skulle kunna ange tecknet. Ofta använder man komplementmetoder. Flyttal representeras med exponent och mantissa tal = m * 2 k 317 = 317/512 * 2 =.111111 2 * 2 11 2 1 1 1 1 1 1 1 1... Mer om representation av tal i härvara tas upp i Digitalteknikkursen. Se även Brookshear avsnitt 1.5-1.7

21-1-2 8 Funktionen eq jämför pekare. Symboler är unika (eq kalle kalle) => t Små heltal är unika (eq 1 1) => t Stora heltal, flyttal, bråk är ej unika (eq 1 1) => nil (eq 1.5 1.5) => nil (eq 5E6 5E6) => nil (eq 3/5 3/5) => nil Pekare till olika listor (eq (a b) (a b)) => nil Pekare till identiskt samma conscell (setq p (a b)) (setq q (rest p)) p p => (a b) a q => (b) q b (eq (rest p) q) => t (eq (rest p) (b)) => nil b

21-1-2 Listan - cons-celler 1 minneshantering via fri lista adress car cdr 1 2 3 4 5 6 7 8 1 11 12 13 14 15 2 3 4 5 6 7 8 1 11 12 13 14 15 16 cons-cell 16 17 17 slutmarkering

21-1-2 1 Exempel (setq a (list (quote (a)) (quote b))) Läs in detta Lisp-uttryck. Det inmatade uttrycket är en lista som skall läggas in i listtabellen. Utrycket skall sedan beräknas, som resulterar i att symbolen a får det globala värdet ((a) b). Det inlästa uttrycket kan illustreras med den grafiska representationen såsom: setq a list quote quote b a

21-1-2 11 1 adress 1 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 11 12 13 14 15 16 17 18 1 11 111 Symbolerna som ingår i det inlästa uttrycket finns i symboltabellen list setq b a quote nil

21-1-2 12 setq a list quote a quote b

21-1-2 13 Allokering av cons-cell (cons a (b c)) pekaren till a pekaren till listan (dess första cons-cell) 1) ta första elementet från fria listan 2) låt fria listan ange nästföljande element 3) lägg in pekarna till cons s argument 4) returnera adressen till den nyss allokerade cons-cellen

21-1-2 14 Listan Efter inläsningen av uttrycket adress 1 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17

21-1-2 15 Efter det att uttrycket beräknats (setq a (list (quote (a)) (quote b)) setq a list quote quote b a? b

21-1-2 16 14 adress 1 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 13 16 4 11 7 1 17 16 17 14 2 3 1 5 6 1 8 1 1 11 1 15 16 17 11 12 13 14 15 16 17 18 1 11 111 Efter beräkning av uttrycket. Symbolen a skall få ett nytt värde list setq b a quote nil

21-1-2 17 Avallokering av minnesutrymme sker automatiskt med sk garbage collection (sophämtning) Finns flera olika metoder: mark-and-sweep - varje objekt har en extra märkbit - det är vid varje tillstånd givet alla ställen från vilket liststrukturer kan refereras från 1) om fria listan är tom vid en cons påbörjas en garbage collection 2) följ alla liststrukturer och sätt märkbiten 3) gå sekvensiellt igenom och bilda en ny fri lista av elle ej märkta cons-celler. Slå av märkbiten.

21-1-2 18 Listan märksteget adress 1 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 märkbit 13 16 4 11 7 1 17 16 17 14 14 2 3 1 5 6 1 8 1 1 11 1 13 1 15 16 17

21-1-2 1 Listan 1 adress 1 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 skapa ny fri lista 13 16 4 11 7 1 17 16 17 14 14 2 3 4 5 6 7 8 1 1 11 14 13 1 15 16 17 märkbit fritt utrymme 1 1 1

21-1-2 2 Referensräknare på varje objekt 3 Fördel: cons-celler kan samlas in efter hand och läggas till fria listan Nackdel: referensräknare tar mycket plats klarar ej cirkulära strukturer Enklare modell: - inga referenser 1 - en referens 1 - två referenser 11 - många referenser

21-1-2 21 Stack stack frame innehåller: - uttryck som håller på att beräknas - bindningar formella parametrar - värdet av argumenten - bindning av lokal variabel / funktion till sitt värde Innehållet i stacken kan inspekteras och till vissa delar ändras via :zoom eller :wdebug (window debugger)

21-1-2 22 Konstant (defconstant my-pi 3.1415) går ej att ändra Parameter (defparameter *max-indata* 5) (make-array *max-indata*...) (dotimes (i *max-indata*..)...) ges värde vanligen endast en gång Globala variabel (defvar *lisas-almanacka* (skapa-tom-årsalmanacka)) (setq *lisas-almanacka* (boka...)) ändras med tilldelning

21-1-2 23 Formella parameterlistor optional parametrar (defun f (x &optional y)) (list x y)) (f 1 2) => (1 2) (f 1) => (1 nil) (defun f (x &optional (y 1)) (list x y)) (f 1) => (1 1) godtyckligt antal parametrar (defun f (x &rest args) (list x (reverse args))) (f 1) => (1 nil) (f 1 2 3 4 5) => (1 (5 4 3 2))

21-1-2 24 Formella parameterlistor nyckelordsparametrar (defun f (x &key min max) (list x min max)) (f a :max 1 :min 1) => (a 1 1) (f b :min :max 1) => (b 1) De aktuella parametrarna kan komma i godtycklig ordning :namn tillhör datatypen keyword och har sig själv som värde Alla argumenten, även nyckelorden, beräkas. På platsen för ett nyckelord kan stå ett godtyckligt uttryck

21-1-2 25 Formella parameterlistor Många funktioner använder nyckelordsparametrar för att ange extra argument: Finns en given nyckel i en associationslista? (defun key? (key al) (member key al :test # (lambda (key pair) (eq key (car pair))))) (remove x (x a x b x c x) :start 1 :end 5) => (x a b c x)

21-1-2 26 Flervärda funktioner (multiple value functions) Vissa funktioner ger flera resultat (truncate 2.3) 2.3 Gör en lista av alla värden en funktion returnerar: (multiple-value-list (truncate 2.3)) => (2.3) Skapa ett flervärt resultat: (values 1 2 3) => 1 2 3

21-1-2 27 Flervärda funktioner Vanligen vill man i den anropande funktionen binda upp det returnerade värdena till lokala variabler: (defun f (x) (if (not (numberp x)) (values typfel ) (values ok (+ x 1)))) returnerar två värden: typfel ok x+1 (defun g (a) (multiple-value-bind (status resultat) (f a) (if (eq status ok) bearbeta resultat felmeddelande ))) Med detta undviker man skapa nya listor.