Introduktion til Funktionsorienteret Programmering.

Størrelse: px
Starte visningen fra side:

Download "Introduktion til Funktionsorienteret Programmering."

Transkript

1 1 Introduktion til Funktionsorienteret Programmering. Dynamiske sprog og omgivelser. Applikativ og funktionsorienteret programmering. Eksempler på funktionsorienteret programmering. Uafhængighed af evalueringsrækkefølge. Referential transparency. Substitutionsmodellen. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 3 I dette kapitel i noterne introducerer vi funktionsorienteret programmering. Vi forsøger at motivere stilarten ved at sætte den op som en kontrast til den mere velkte imperative stilart. Og vi vil studere nogle fundamentale egenskaber ved funktionsorienterede programmer. 3

2 Dynamiske sprog og omgivelser. Typiske karakteriska ved dynamiske sprog. Applikativ stil: En programmeringsstil som bruger én fundamental syntaktisk udtryksmåde: anvelse (applikation) af funktioner på argumenter. Typer: Typen af navne, parametre og udtryk optræder ikke eksplicit og statisk i kildeprogrammer. Dataobjekterne ker deres egne typer, og kan direkte udnytte typeinformation under programudførelsen. Automatisk lageradministration: Programmøren skal ikke bekymre sig om deallokering af dataobjekter. Typiske karakteristika ved dynamiske omgivelser. Baseret på fortolkning eller incrementel oversættelse. Understøtter en incrementel og interaktiv programmeringsproces, med mulighed for hurtig afprøvning og feedback. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 4 Dynamiske sprog og omgivelser er en konstrast til de sprog og omgivelser, som har været fremherske på de første dele af datalogi- og dataingeniørstudiet. Vores udgangspunkt er, at kskab til disse sprog, og kskab til de programmeringsteknikker, som naturligt dyrkes i disse sprog, er væsentlig i en afrundet datalogiuddannelse. Applikativ programmering kaldes også undertiden værdi-orienteret programmering. Statisk omgivelse. Beskrivelse Udførelse Information går tabt. Afstand mellem udførelsesbegreber og programbeskrivelsesbegreber. Dynamisk omgivelse. Beskrivelse Udførelse I figuren til venstre er der en solid mur mellem programbeskrivelse og udførelse. Beskrivelsen transformeres til et lavere niveau, hvilket skaber afstand mellem de to niveauer. Og information går tabt, (f.eks. viden om variables navne). I nogle anvelsessammenhænge er det nyttigt under programudførelsen at kunne reflektere om programbeskrivelsen. I langt de fleste konventionelle sprog er dette udelukket. I mange dynamiske sprog er det muligt på simpel vis. I den sidste del af kurset vil vi se mere rafinerede eksempler på dette. Tilgang til programbeskrivelsen fra udførelsesomgivelsen. 4

3 Brugen af typer. Svag typning Stærk typning (weak typing). Typefejl kan føre til fejl-beregninger. (strong typing). En anvelse af typer der sikrer, at typefejl ikke fører til fejlberegninger. Typecheck kan forekomme på udførelsestidspunktet. Statisk typning (static typing). Typer af udtryk kan bestemmes før programudførelse. Typecheck udføres før programudførelse (f.eks. under oversættelsen). Eksplicit typedekoration eller implicit typeinferens. Statisk typning medfører stærk typning. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 5 Denne slide viser forskellige tilgange til typer i programmeringssprog. Svag typning forekommer i lavniveau sprog, som med eller mod intensionen kan operere på data af alle typer. Dette forekommer på bitniveau. I typiske dynamiske programmeingssprog, som omtalt på en tidligere slide, er der hverken eksplicit type dekoration (ala Pascal) eller implicit typeinferens (ala ML). I dynamiske programmeringssprog har vi altså ikke statisk typning. Man kunne være fristet til at sige, at disse programmeringssprog har dynamisk typning, men ifølge ovenståe klassificering af typning, har vi faktisk ikke behov for en sådan betegnelse. Det forholder sig nemlig sådan, at dynamiske programmeringssprog sikrer ved typecheck på udførelsestidspunktet, at typefejl ikke fører til fejlberegninger. Der er altså ifølge ovenståe definitioner stærk typning i de fleste dynamikse programmeringssprog. 5

4 Funktionsorienteret kontra imperativ programmering. Funktionsorienteret Programmering: Funktioner er abstraktioner over udtryk. Applikativ programmering. Navne kan bindes til værdier, men eksistere navnebindinger s værdier kan ikke ændres. Definition og anvelse af højereordens funktioner. Funktioner er fuldgyldige værdier, på lige fod andre mere simple værdier. Kontrast: Imperativ Programmering. Procedurel programmering: Procedurer er abstraktioner over kommaner. En programmeringsstil som gør brug af kommaner i bestemte kontrolmønstre. Modellerer et system, hvis tilstand ændres som en funktion af tiden. En komman har en målelig effekt på sine omgivelser. Ærke-kommanen: assignment Kurt Nørmark, Aalborg Universitet 11/6/96 s. 6 Man kan vælge at forstå skridtet fra imperativ programmering til funktionsorienteret programmering på samme måde som skridtet fra (ustruktureret) goto-programmering til struktureret programmering. I begge tilfælde taler vi om en forandring fra (relativt) kaotiske forhold til mere ordnede forhold og rene liner. De rene liner og de mere ordnede forhold betyder, at et program bliver lettere at forstå for folk der af én eller anden grund skal sætte sig ind i programmet, herunder naturligvis programmørerne. Det bliver også væsentligt lettere at ræsonnere omkring programmet, med henblik på sikring af korrekthed i forhold til en specifikation. En væsentlig forandring fra imperativ programmering til funktions-orienteret programmering er, at vi dropper assignmentet i funktionsorienteret programmering. Mere generelt afskærer vi os fra at ændre på programmets tilstand (værdierne bundet til de eksistere navne) som funktion af tiden. Vi afskærer os også fra at lave andre sideffekter, så som print operationer. Man kan naturligvis argumentere for, at væsentlige applikationsområder kun dårligt lader sig understøtte af programmer, der skal leve med disse begrænsninger. Men der er en overraske stor mængde af applikationsområder, der meget fint kan understøttes af funtionsorienterede programmer. Og der er ofte væsentlige dele af imperative programmer, som lader sig behandle funktionsorienteret. Hvorfor betegnelsen højereordens funktioner? 0-te orden: data eller konstante funktioner. 1-orden: funktioner som tager 0-te ordens funktioner som parameter, og returnerer sådanne som resultat. 2-orden (højere orden): funktioner som tager 1-ordens funktioner som parameter, og returnerer sådanne som resultat. 6

5 Seks gode årsager til at studere funktionsorienteret programmering. 1. Undgå brugen af assignment (hvor det er muligt). 2. Programmér på et højere abstraktionsniveau. 3. Forbered dit program på parallel udførelse. 4. Vær beredt på AI (AI programmering foregår i Lisp eller Prolog). 5. Skriv udførbare specifikationer. 6. Slå bro til teoretikerne. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 7 Ad 1: Brugen af assignment komplicerer den beregningsmæssige model, og det komplicerer ræsonnementer om et program. Det diskuterede vi i noterne til forrige slide. Det er korrekt at funktionsorienteret programmering er uden assignment, men det vil være alt for fattig at opfatte programmering uden assignment som funktionsorienteret programmering. Der hører langt mere med til historien. Ad 2: Det er velkt at højnelse af abstraktionsniveau for det meste gør det lettere at håndtere et problem. Vi abstraherer som regel bort fra nogle mindre væsentlige detaljer, som blot tilslører det virkelig væsentlige. Udnyttelsen af højereordens funktioner tillader os at indfange abstraktioner over udtryk, som vi ellers ikke kunne håndtere. Vi vil se mange eksempler på dette i kapitlet om højereordens funktioner senere i noterne. Ad 3: Som vi vil se lidt senere i dette kapitel kan mange deludtryk i et funktionsorienteret program beregnes samtidig, simpelthen fordi der ikke er mulighed for at påvirke værdien af det ene sådanne udtryk fra de andre. Dette er en klar fordel, hvis man går efter mere effektivitet der kan opnåes på uni-processor maskiner. Ad 4: I de sidste år er AI (kunstig intelligens) dukket op som en komet, altså med forholdsvis jævne mellemrum. I dette anvelsesområde er dynamiske sprog særdeles anvelige, på grund af den ekstreme fleksibilitet. Lisp plejer at spille en store rolle inden for AI. Ad 5: Algebraiske specifikationer baserer sig på funktioner, og kan i visse tilfælde udføres direkte. Ad 6: Det kan lade sig gøre at ræsonnere om og bevise funktionsorienterede programmer. 7

6 Eksempel: Navnebinding i stedet for assignment (1). solve(a,b,c: real): root-list is -- returner løsningerne af ligningen ax 2 +bx + c = 0 local determinant: real determinant := b * b - 4 * a * c; if determinant > 0 then result :=... elsif determinant = 0 then result :=... else result := Misbrug af assignment. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 8 Dette eksempel viser et (måske lidt naivt) eksempel i et imperativt program (skrevet i et sprog, som ligner Eiffel), nemlig løsning af en 2. gradsligning. Vi sætter fokus på assignment af variablen determinant til den velkte værdi b * b - 4 * a * c. I langt de fleste programmer, som vi skriver, har vi behov for at tilskrive variable værdier ala determinant af hensyn til klarhed i udtryksform. Der kan også være en effektivitetsmæssig årsag, nemlig det at undgå genberegning af det samme udtryk flere gange. Vores pointe er her, at dette er en meget speciel anvelse af et assignment. Det specielle består i, at vi aldrig laver værdien af variablen om igen. Det forhold, at variablens værdi aldrig ændres efter første tilskrivning retfærdiggør en anden udtryksform: Vi går fra brug af assignment til navnebinding. Dette er emnet på næste slide. Hvad er forholdet mellem konstanter og de navnebindinger (eller assignments) vi her taler om? Konstanter i et program er størrelser, hvis værdier låses fast inden programudførelsen. Brug af konstanter anbefales ligeledes af hensyn til klarhed og læselighed af programmet, men i lige så høj grad for at sikre at konstanters værdi kan ændres (i programbeskrivelsen, vel at mærke) på en sikker måde. 8

7 Eksempel: Navnebinding i stedet for assignment (2). Navnebinding med syntaktisk sukker solve(a,b,c: real): root-list is let determinant be b * b - 4 * a * c in if determinant > 0 then return... elseif determinat = 0 then return... else return empty_list Uden syntaktisk sukker: solve(a,b,c: real): root-list is local-solve(determinant: real): root-list is if determinant > 0 then return... elseif determinat = 0 then return... else return empty_list return local-solve( b * b - 4 * a * c ) Kurt Nørmark, Aalborg Universitet 11/6/96 s. 9 Vi arbejder her videre med eksemplet fra forrige slide. Til venstre viser vi i et fiktivt sprog, hvordan navnebinding kunne tage sig ud. I næste forelæsning (som introducrer Scheme) kommer vi til at se helt konkrete konstruktioner til navnebinding. Til højre illustrerer vi, hvordan man kan anve en lokal funktion til navnebindingsformål. Ideen er at funktionens formelle parameter er navnet, som bindes ved funktionskaldet. Med denne løsning har vi gjort navnebinding mulig uden at introducere nye konstruktioner i sproget. Men løsningen er ikke attraktiv. Den er kluntet i almindelighed, og der er i særdeleshed for stor afstand mellem introduktionen af navnet (her den formelle parameter i local-solve) og værdien (det aktuelle parameterudtryk i kaldet af local-solve). Man kan observere, at vi faktisk ikke har særlig meget brug for et navn til funktionen, som binder et eller flere navne for os. Hvis sproget muliggør det, vil en annonym funktion gøre fin fyldest. Dette vil blive mere konkret i næste kapitel, når vi studerer Scheme s let-konstruktion. Bemærk at vi også ovenfor har introduceret et return udtryk, som definerer værdien af funktionen. Det siger næsten sig selv, at hvis vi bl.a. er interesseret i at komme assignment til livs skal vi ikke brug assignment til en eller anden pseuvariable for at defineret funktionens værdi. Vi definerer ikke nærmere her, om return expr afbryder funktionskroppen og returnerer umiddelbart til kalderen. 9

8 Iteration, rekursion og mapping. Sædvanlige iterative kontrolstrukturer passer dårligt til funktionsorienteret programmering. Iteration kan generelt set udtrykkes ved anvelse af rekursive funktioner. Iteration kan udtrykkes effektivt ved hale-rekursive funktioner. Iterative gennemløb o.l. af forskellige datastruktureres kan defineres ved at abstrahere over bestemte rekursive mønstre af funktionskald. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 10 Sædvanlige kontrolstrukturer sekventierer nogle mere primive kommaner (også ofte kaldet sætninger), som har en effekt på beregningens tilstand. Man kan lidt plat sige, at kontrolstrukturerne blot bestemmer hvordan vi skal blande assignments og andre kommaner, der har en umiddelbar effekt på programtilstanden. Ud fra denne betragtning er det klart, at vi ikke har brug for sådanne kontrolstrukturer i funktionsorienterede programmer. På denne slide diskuterer vi iteration. Der er naturligvis behov for gentagelser i en eller anden forstand i funktionsorienterede sprog. Men iterationen foregår altid på data, og det resulterer i en værdi, der er resultatet af at gentage en beregning på disse data. Som det skulle være de fleste bekt allerede, kan rekursive funktioner bruges til noget sådant. Rekursion er forbundet med et lagermæssigt overhead, idet vi skal bruge plads på at repræsentere rekursionsudviklingen indtil vi når til basistilfældet. Der findes imidlertid en form for rekursion, som eliminerer dette effektivt. Dette vil vi stifte bektskab med på én af de næmeste slides. Når vi indfører højereordens funtioner kan vi indfange rekursive mønstre, og abstrahere over disse. Herved kan vi opbygget et bibliotek af iterations-primitiver på forskellige former for datastrukturer, som er specialdesignede til gentagne beregninger på disse strukturer. Dette er bemækelsesværdigt, og vi vil selvfølgelig ve tilbage til dette i de komme kapitler. 10

9 Eksempel på iteration og rekursion. En funktion, som gennemløber en liste af tal, og som returnerer en tilsvare liste af forblede tal. Imperativ løsning. uble(lst: list[integer]): list[integer] is from result.create; lst.goto_beginning until lst.at_ result.insert_after(lst.retrieve_after * 2); result.advance; lst.advance ; ; Rekursiv løsning. uble(lst :list[integer] ): list[integer] if empty(lst) then empty-list else concat (head(lst) * 2, uble(tail (lst))) Kurt Nørmark, Aalborg Universitet 11/6/96 s. 11 Vi viser her hvordan et kald af funktionen uble udvikler sig. Stakudvikling: Double: rekursiv løsning. basis tilfælde. tid Rekursionen udvikler sig Listen konstrueres Her er resultatet Kald af rekursive funktioner kræver en lagermængde, der er proportional med højden af rekursionsstakken. I ovenståe tilfælde betyder dette, at højden af rekursionsstakken på et tidspunkt bliver proportional med længden af listen, som vi vil fo ble. Dette kan være et problem, hvis der ikke er sat tilstrækkeligt meget lager af til køretidsstak. 11

10 Eksempel på rekursion og mapping. Halerekursiv løsning: uble(lst): uble-help(lst, empty-list) uble-help(lst, res): if empty(lst) then res else uble-help(tail(lst), concat-(res, 2 * head(lst))) Løsning via mapning: uble(lst): map(*2, lst) map(f, lst): if empty(lst) then empty-list else concat (f(head(lst)), map(f, tail(lst))) System-defineret abstraktion over at anve en funktion på alle elementer i en liste og returnere listen af resultater af disse anvelser. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 12 På denne slide dropper vi typeangivelsen af parametre og resultatet af funktionerne. Stakudvikling: Double: halerekursiv løsning uden lageroptimalisering: Her er resultatet tid Double: halerekursiv løsning med lageroptimalisering: Rekursionen udvikler sig Ren afstakning. Der sker intet fornuftigt her. Her er resultatet tid Den halerekursive løsning vist på listen ( ): lst res ( ) () (2 3 4) (2) (3 4) (2 4) (4) (2 4 6) () ( ) En funktion er halerekursiv hvis det rekursive kald direkte er resultatet af funktionen. I den halerekursive løsning er det kun nødvigt med én aktivationrekord, som jo har lst og res som felter. Tilstanden af iterationen er helt indeholdt i disse to parametre, som derfor kan overskrives (reassignes) undervejs i iterationen. Dette er en optimalisering, lavet af udførelsessystemet! Begrebsmæssigt bør programmøren tænke på iterationen som forløbe øverst, g velvide at det er meget mere lagerøkonomisk. I mapning eksemplet forneden kunne vi naturligvis (og burde nok) have anvt en halerekursiv version af mapning. 12

11 Eksempel på højereordens funktion. Ide: Vi ønsker at programmere en funktion, som returnerer en approximation af den afledte funktion som resultat. Højereordens funktion: Funktion som resultat. Funktion som parameter. Function derive (f: function(real): real; dx: real): [function(real): real] is return function(x: real): real is return ( f(x + dx) - f(x)) / dx Store udfordringer til de fleste imperative sprog, på trods af, at disse understøtter funktionsbegrebet. Muligt i funktionsorienterede sprog. Signatur for derive: (R R) x R (R R) Kurt Nørmark, Aalborg Universitet 11/6/96 s. 13 I ovenståe eksempel refererer den indre funktion, der returneres som resultat, til parameteren f af den ydre funktion. Bliver denne binding af f til en aktuel parameterværdi mon brudt, når vi f.eks. anver deriv således let g be derive(sinus, epsilon) in g(2.7) Spørgsmålet kan omformuleres til er det statisk eller dynamisk navnebinding vi ønsker. Svaret er som næsten altid: statisk navnebinding. Af hensyn til sikkerhed og gennemskuelighed skal navne bindes i definitionens omegn, og ikke i anvelsens omegn. Herved opstår der imidlertid et problem ved funktionsreturnering, som vi ikke er vandt til. Vi kan ikke blot glemme alt om aktiveringen af funktionen deriv, idet resultatet af denne beregning stadig holder fast i (er afhængig) af de navnebindinger, der blev etableret i forbindelse med kaldet af derive (her parametrene). 13

12 Eksempel på funktionsorienteret programmering. En funktions-orienteret løsning på en realistisk opgave. Opgave: Givet en tekst(streng) med danske ord, find ud af om der er mere 5 stavefejl i teksten. tokens-in-text Dete er en lille tekkst, med ( Dete er en lille tekkst, tre små stavefelj!! med tre små stavefelj!! ) filter(alfabetisk) filter(not(spelling-ok)) ( Dete tekkst stavefelj ) ( Dete er en lille tekkst med tre små stavefelj ) length 3 n -> (n > 5) false threshhold(length( filter(not(spelling-ok), filter(alfabetisk, tokens-in-text(text)))))) Kurt Nørmark, Aalborg Universitet 11/6/96 s. 14 For at ovenståe skal virke, skal der naturligvis være defineret passe funktioner. Nogle af funktionerne er meget specifikke, mens de andre er generelt anvelige. Et ord om funktionen not(spelling-ok). Vi antager, at spelling-ok er en funktion: spelling-ok: ord -> bool som fortæller hvorvidt parameteren er korrekt stavet. Vi har brug for negeringen af denne. Vi kunne opfatte not(spellig-ok) som pseu notation for denne funktion; det er g mere spænde at opfatte not som en funktion, der tager en boolsk funktion som parameter og returnerer en anden boolsk funktion som parameter, negeringen af parameterfunktionen: not: (X -> bool) -> (X->bool). Med andre ord, vi opfatter not som en højereordens funktion. X vil konkret være typen String. Tilsvare kan vi opfatte filter som en funktion, der tager en boolsk-returnere funktion som parameter, og som selv returnereren en funktion: filter: (String -> Boolean) -> (String* -> String*) Filter(not(spelling-ok)) er således en funktion, der givet en liste af strenge returnerer listen af de strenge, der ikke er korrekt stavede. Vi vil studere filter i større detalje i kapitlet om højereordens funktioner. 14

13 Uafhængighed af evalueringsrækkefølge. I et funktionsorienteret program beregnes et udtryk, hvilket resulterer i en værdi. Et udtryk er hierarkisk struktureret i deludtryk. (a * b = c) and not (c = d) f(a * b, g(b + c)) a * = c b and not = c d a * f b g + b c Deludtryk kan beregnes i en vilkårlig rækkefølge såfremt hele udtrykket har en værdi. Såfremt der ikke opstår fejl i deludtryk. Såfremt beregningen af alle deludtryk terminerer. Deludtryk kan beregnes parallelt. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 15 Deludtryk kan beregnes i en vilkårlig rækkefølge: Det er ikke muligt for beregningen af et deludtryk at påvirke beregningen af et deludtryk i en anden gren af udtrykket. I et procedure- eller funktionskald i et sædvanligt imperativt programmeringssprog er det ikke god stil at gøre antagelser om, at parametrene beregnes i en bestemt rækkefølge (f.eks. venstre mod højre). Der er g intet til hinder for at funktionen g, i f.eks. Pascal, kunne lave en sideeffekt på variablen b, således at det ville blive af afgøre betydning, i hvilken rækkefølge de to deltryk af f blev beregnet. Rækkefølgen af evaluering er et dybere emne det antydes på denne slide. Kan det f.eks. under nogen omstændigheder være af betydning om vi starter fra toppen eller fra bunden af evalueringstræet. Med andre ord, skal en funktion beregne alle sine parametre inden funktionen kaldes (start fra bunden), eller skal vi beregne parametrene når der bliver brug for dem (start fra toppen). Vi ver tilbage til denne problematik i kapitlet Evalueringsrækkefølge og forsinket evaluering. 15

14 Referential transparency (1). Et udtryk U1, som er lig med et udtryk U2 i en bestemt kontekst, kan erstatte U2 i denne kontekst. X + let a = 5 b = 7 in (a - b) * (b - 5) + Y 1. X + let a = 5 b = 7 in -2 * (b - 5) + Y Hvilken form for lighed? Samme objekt (eq). Strukturel lighed (equal) X + let a = 5 b = 7 in (a - b) * (b - a) + Y X + (-4) + Y Referential transparency fremmer muligheden for Ræsonnementer og bevis Programtransformationer Kurt Nørmark, Aalborg Universitet 11/6/96 s. 16 Diskussionen om lighed: Lighed er ikke et entydigt begreb. Vi ker mindst til identiske objekter (=), shalow equality (equal), og strukturel lighed (deep_equal). Ifølge Lisp terminologi svarer = (i Eiffel) til eq; deep_equal i Eiffel svarer til equal. Hvilken form for lighed mener vi ovenfor? Den mindst diskriminere lighed er tilstrækkelig. I termer af ovenståe er deep_equal god nok. Husk at hvis a=b er equal(a,b) også opfyldt, og hvis equal(a,b) er opfyldt er deep_equal(a,b) opfyldt (men det omvte gælder ikke). Vi har under funktionsorienteret programmering ingen mulighed for at skelene mellem to objekter eller datastrukturer, som strukturelt set er ens. Hvis vi skulle finde ud af om to sådanne objekter O1 og O2 opfylder O1 = O2 (i Eiffel forstand, altså eq), ville vi være nødt til at prøve at ændre (mutere) den ene, og se om det havde effekt på den anden; men det er jo netop denne mulighed vi er afskåret fra i funktionsorienteret programmering. I de viste transformationer ovenfor sker der følge substitutioner: 1. Udtrykket a-b erstattes med tallet Tallet 5 erstattes med a 3. Udtrykket (a-b) *(b-5) erstattes af -4. Hvert af de fire udtryk vist ovenfor kan gøre det ud for hinanden. Der vil aldrig kunne ses forskel på resultatet af den omkringligge beregning. Konteksten er her en addition af X, let-udtrykket og Y. 16

15 Referential transparency (2). F er en ren funktion: (1) (3 * F(a,b) + b) * (3 * F(a,b) - c) (2) let t be 3 * F(a,b) in (t + b) * (t - c) Sammenlign med situationen, hvor F er en uren funktion : F(a,b: integer): integer is c := c + 1; result := 2 * (a + b) Antallet af gange F kaldes er vigtig for resultatets værdi. Rækkefølgen af beregningen af de to faktorer i (1) er også af betydning. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 17 I et funktionsorienteret program vil de to forekomster af udtrykket 3 * F(a,b) altid have den samme værdi. Referential transparency giver, at hvis t er lig med 3 * F(a,b), kan t erstatte begge forekomster. Dermed har vi ovenståe transformation. På denne slide sammenligner vi med et eksemplet på en uren funktion, der laver en tilstandsforandring på sin omgivelse, her variablen c. Hvis F(a,b) kun beregnes én gang giver (1) et andet resultat hvis F(a,b) beregnes to gange. Endvidere er det væsentligt hvilken af faktorerne i (1) der beregnes først. Hvis den venstre faktor beregnes først vil c i højre faktor være én større, når højre faktor bliver beregnet. Dette er noget rod, og derfor anbefaler man sædvanligvis i alle sprog, der har funktioner såvel som procedurer, at funktioner ikke har sideeffekter (ligesom nødvigvis, at procedurerne har). 17

16 En beregningsmodel baseret på substitution. Resultatet af et funktionskald kan beregnes ved brug af en meget simpel model: substitutionsmodellen. En funktion anves på et antal aktuelle parametre ved at beregne dets krop hvori alle formelle parametre er substitueret med værdien af de aktuelle parametre (argumenterne). Modellen fremkommer ved anvelse af referential transparency og simpel, positionel parameterkorrespondance. Eksempel: f(5, g(6)) f(x, y): (x + y) * (x - y) g(x): x div 2 Det er naturligt (men ikke nødvigt) at starte indefra og ud: beregn først ved brug af modellen g(6), hvilket giver 3. Substituer x med 5, og y med 3 i definitionen af f. Resultat: 16. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 18 Som allerede omtalt vil vi et senere kapitel diskutere forskellige rækkefølger af substitutioner. Her vil vi se, at vi ikke nødvigvis skal beregne g(6) før vi beregner (x+y) * (x-y) i kroppen af f. Substitutionsmodellen er dybest set en konsekvens af referential transparency, som diskuteret ovenfor. Givet at de formelle parametre er bundet til værden af de aktuelle parametre, kan de formelle parametre i kroppen erstattes af argumenterne (eller for den sags skyl af de aktuelle parameterudtryk). Husk at vi taler om et argumenter som er værdien af et aktuelt parameterudtryk. 18

17 Funktionsorienteret stil i praktisk programmering. Være bevidst om fordelene ved funktionsorienteret programmeringsstil. Højnelse af abstraktionsniveau. Reproducerbare beregninger: letter aftestning og debugging. Identificere delproblemer, som lader sig løse i funktionsorienteret stil. Programmeringsomgivelsen for applikative sprog: Read-eval-print shell : Manifestationen af den interaktive og incrementelle arbejdsform. Evaluering af funktioner (opnåelse af resultater). Definition og redefinition af globale værdier (funktioner). Imperative islæt i den måde omgivelsen tillader os at redefinere funktioner. For dyb blokstruktur er upraktisk. Også anvelig for andre paradigmer det funktionsorienterede. I praksis slår man bro mellem en teksteditor og read-eval-print shellen. Kurt Nørmark, Aalborg Universitet 11/6/96 s. 19 Lad os knytte en bemærkning til det, at der er imperative islæt ved den måde programmeringsomgivelsen tillader os at definere og re-definere navne på funktioner og variable. Det er naturligvis nødvigt i en programudviklingsproces at have mulighed for at re-definere et navn til en anden værdi, såsom en modificeret funktion. Dette er typisk et resulat af en fejlfindingsproces. Er dette i konflikt med funktionsorienteret programudvikling? Svaret er nej, idet denne redefinition ikke kan programmeres. I det næste kapitel om Scheme vil det f.eks. være helt meningsløst at lave betingede define s, eller iterative define s. Definitioner og redefinitioner fyres af af en programmør, gennem interaktiv dialog med omgivelsen. Programbeskrivelsen kan dermed ændre sig over tiden. Dette er en nødvighed, selv i funktionsorienteret programmering. Selv om programbeskrivelsen ofte kan tilgåes fra et køre program, opfatter vi ikke dette som et problem ift. funktionsorienteret programmering. 19

Introduktion til Funktionsorienteret Programmering.

Introduktion til Funktionsorienteret Programmering. Introduktion til Funktionsorienteret Programmering. Sammenligning med det imperative paradigme Assignment kontra navnebinding. Iterative kontra rekursion. Introduktion til højereordensfunktioner. Evalueringsrækkefølge.

Læs mere

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. 26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive

Læs mere

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl. 9 Fejlhåndtering Årsagen til fejl Erkelse af fejl Håndtering af fejl Fejlerkelse og -håndtering i objekt-orienterede sprog Fejlerkelse og -håndtering i Eiffel Udbredelse af fejl i Eiffel Nuanceret fejlhåndtering

Læs mere

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner.

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner. 1 Grundbegreber. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner. Parametermekanismer. Blokke og navnebindinger. Scope og scoperegler. 3 Parallelle

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

Læs mere

3 Algebraisk Specifikation af Abstrakte Datatyper.

3 Algebraisk Specifikation af Abstrakte Datatyper. 3 Algebraisk Specifikation af Abstrakte Datatyper. Specifikation kontra program. Bestanddele af en algebraisk specifikation. Klassificering af funktioner i en ADT. Systematisk definition af ligninger.

Læs mere

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer. 14 Algoritmeanalyse. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. O og Ω. Køretid for forskellige kontrolstrukturer. Eksempler på algoritmeanalyse. Eksponentiel og polynomiel

Læs mere

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser. 10 Nedarvning I. Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Dynamisk binding og virtuelle operationer. Decentraliseret/centraliseret

Læs mere

18 Multivejstræer og B-træer.

18 Multivejstræer og B-træer. 18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træer.

Læs mere

4 Basal Objekt-orienteret Programmering I.

4 Basal Objekt-orienteret Programmering I. 4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.

Læs mere

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign 28 Algoritmedesign. Algoritmeskabelon for Del og Hersk. Eksempler på Del og Hersk algoritmer. Binær søgning i et ordnet array. Sortering ved fletning og Quicksort. Maksimal delsums problem. Tætteste par

Læs mere

Multiparadigme Programmering

Multiparadigme Programmering Multi Programmering Repetition: De grundliggende r Systematisk karateristik. Paradigmesupplering. Symmetrisk multi programmering Leda eksempler på logikprogrammering kombineret med imperativ og funktionsorienteret

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur (struktur opbygget af et endeligt antal enkeltdele) blandt mange mulige. Eksempler:

Læs mere

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Rename og redefine. Abstrakte klasser. Dynamisk binding. 11 Nedarvning II. Enkeltnedarvning i Eiffel. Rename og redefine. Initialisering af superklasse-dele af et objekt. Interfaces til klienter og subklasser. Typesammenlignelighed og polymorfi. Abstrakte klasser.

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. 16 Træer. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype. Gennemløb af binære træer. Træer i Eiffel. 229 Definition af et træ.

Læs mere

Introduktion. Philip Bille

Introduktion. Philip Bille Introduktion Philip Bille Plan Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer og datastrukturer Hvad er det? Algoritmisk problem: præcist defineret relation mellem

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur blandt mange mulige. Dynamisk programmering Optimeringsproblem: man ønsker at finde

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

8 Specifikation med Logiske Udtryk.

8 Specifikation med Logiske Udtryk. 8 Specifikation med Logiske Udtryk. Specifikation kontra program. Specifikation af funktioner. Specifikation af funktions-orienterede ADT-er. Integreret specifikation og program i Eiffel. Korrekthed af

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

2 Funktionsorienteret programmering i Scheme.

2 Funktionsorienteret programmering i Scheme. 2 Funktionsorienteret programmering i Scheme. Lisp og Scheme. Listebegrebet i Lisp. Funktionsdefinition og lambdaudtryk. Navnebinding. Iteration. Første-klasses funktioner. Closures som klasser. Praktisk

Læs mere

En note om Programmering

En note om Programmering En note om Programmering Kurt Nørmark Institut for Datalogi Aalborg Universitet normark@cs.aau.dk Resumé Denne note er en introduktion til programmering. Formålet er at give dig et indblik i hvad programmering

Læs mere

Moduler i Standard ML

Moduler i Standard ML Moduler i Standard ML Hans Hüttel December 2001 I løbet af datalogikurset har vi haft glæde af en hel række forskellige standardmoduler som f.eks. Math, Int, Real og String. Disse moduler kan, har vi set,

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

3. Om skalamønstrene og den indfoldede orden

3. Om skalamønstrene og den indfoldede orden Dette er den tredje af fem artikler under den fælles overskrift Studier på grundlag af programmet SKALAGENERATOREN (forfatter: Jørgen Erichsen) 3. Om skalamønstrene og den indfoldede orden Lad os begynde

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Datalogi C, RUC Forelæsning 22. november 2004 Henning Christiansen Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Dagens program Hvad

Læs mere

29 Opsamling af Objekt-orienteret Programmering.

29 Opsamling af Objekt-orienteret Programmering. 29 Opsamling af Objekt-orienteret Programmering. Bottom-up kontra top-down design. "The shopping list approach". Hvordan finder man på objekterne. Klasser og dataabstraktion. Klasse interface og interface-teknikker.

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Hvad er formel logik?

Hvad er formel logik? Kapitel 1 Hvad er formel logik? Hvad er logik? I daglig tale betyder logisk tænkning den rationelt overbevisende tænkning. Og logik kan tilsvarende defineres som den rationelle tænknings videnskab. Betragt

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Martin Elsman Department of Computer Science University of Copenhagen DIKU September 27, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 September

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af opgaverne:

Læs mere

2 Abstrakte datatyper.

2 Abstrakte datatyper. 2 Abstrakte datatyper. Motivere eksempel: top-down udvikling af program 'mini-bank' Strukturering af et program: efter data eller funktion? Definition af en abstrakt datatype og tilknyttede begreber. Fænomener,

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

13 Objekt-orienteret Design.

13 Objekt-orienteret Design. 13 Objekt-orienteret Design. Analyse i forhold til design. Programbeskrivelse og designbeskrivelse. Sømløs udvikling. Design i forhold til OO Eiffel programmering. Kategorisering af klasser i et design.

Læs mere

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet Hans Hüttel 27. oktober 2004 Mathematics, you see, is not a spectator sport. To understand mathematics means to be able to do mathematics.

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0 BAndengradspolynomier Et polynomium er en funktion på formen f ( ) = an + an + a+ a, hvor ai R kaldes polynomiets koefficienter. Graden af et polynomium er lig med den højeste potens af, for hvilket den

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides 01017 Diskret Matematik E12 Alle bokse fra logikdelens slides Thomas Bolander 1 Udsagnslogik 1.1 Formler og sandhedstildelinger symbol står for ikke eller og ( A And) hvis... så... hvis og kun hvis...

Læs mere

Algoritmer og invarianter

Algoritmer og invarianter Algoritmer og invarianter Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker. Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker.

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Programmering med Lister og Arrays Martin Elsman Department of Computer Science University of Copenhagen DIKU October 3, 2017 Martin Elsman (DIKU) Programmering og

Læs mere

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Matricer og lineære ligningssystemer

Matricer og lineære ligningssystemer Matricer og lineære ligningssystemer Grete Ridder Ebbesen Virum Gymnasium Indhold 1 Matricer 11 Grundlæggende begreber 1 Regning med matricer 3 13 Kvadratiske matricer og determinant 9 14 Invers matrix

Læs mere

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Sproget Limba. Til brug i G1 og K1. Dat1E 2003 Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,

Læs mere

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. 19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel

Læs mere

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal Philip Bille Algoritmer og datastrukturer Algoritmisk problem. Præcist defineret relation mellem input og output. Algoritme. Metode til at løse et algoritmisk problem. Beskrevet i diskrete og entydige

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Typer og Mønstergenkendelse Martin Elsman Datalogisk Institut Københavns Universitet DIKU 23. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Procedurer og funktioner - iteration og rekursion

Procedurer og funktioner - iteration og rekursion Procedurer og funktioner - iteration og rekursion Procedurer De første procedurer vi så på var knyttet til handlinger, der skulle udføres, fx at klikke på en knap for at lukke en form eller afslutte et

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Pointen med Funktioner

Pointen med Funktioner Pointen med Funktioner Frank Nasser 0. april 0 c 0080. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er en

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

5 Basal Objekt-orienteret Programmering II.

5 Basal Objekt-orienteret Programmering II. 5 Basal Objekt-orienteret Programmering II. Historik og sprogoversigt. Programbeskrivelse kontra programudførelse. Referencer og værdier. Skabelse af objekter i Eiffel. Features og deres klassificering

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

Introduktion til Laplace transformen (Noter skrevet af Nikolaj Hess-Nielsen sidst revideret marts 2013)

Introduktion til Laplace transformen (Noter skrevet af Nikolaj Hess-Nielsen sidst revideret marts 2013) Introduktion til Laplace transformen (oter skrevet af ikolaj Hess-ielsen sidst revideret marts 23) Integration handler ikke kun om arealer. Tværtimod er integration basis for mange af de vigtigste værktøjer

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2 Affine rum I denne note behandles kun rum over R. Alt kan imidlertid gennemføres på samme måde over C eller ethvert andet legeme. Et underrum U R n er karakteriseret ved at det er en delmængde som er lukket

Læs mere

Objekt-orienteret programmering uden klasser: Self.

Objekt-orienteret programmering uden klasser: Self. Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.

Læs mere

Matematisk modellering og numeriske metoder. Lektion 16

Matematisk modellering og numeriske metoder. Lektion 16 Matematisk modellering og numeriske metoder Lektion 16 Morten Grud Rasmussen 6. november, 2013 1 Interpolation [Bogens afsnit 19.3 side 805] 1.1 Interpolationspolynomier Enhver kontinuert funktion f på

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale Programmering i C Lektion 1 16. september 2008 Målgruppe Indhold Form Materiale Kursusintroduktion 1 Målgruppe 2 Indhold 3 Form 4 Materiale 2 / 21 Målgruppe Indhold Form Materiale Folk der har styr på

Læs mere

Teoretiske Øvelsesopgaver:

Teoretiske Øvelsesopgaver: Teoretiske Øvelsesopgaver: TØ-Opgave 1 Subtraktion division i legemer: Er subtraktion division med elementer 0 i legemer veldefinerede, eller kan et element b have mere end ét modsat element -b eller mere

Læs mere

Rettelser til Pilen ved træets rod

Rettelser til Pilen ved træets rod Rettelser til Pilen ved træets rod Hans Hüttel Pr. 12. juni 2003 Nedenstående rettelser er indsamlet af mig selv, Peter Poulsen, Martin Maach og ikke mindst Lars Schunk i løbet af foråret 2003. Simple

Læs mere

Elementær Matematik. Mængder og udsagn

Elementær Matematik. Mængder og udsagn Elementær Matematik Mængder og udsagn Ole Witt-Hansen 2011 Indhold 1. Mængder...1 1.1 Intervaller...4 2. Matematisk Logik. Udsagnslogik...5 3. Åbne udsagn...9 Mængder og Udsagn 1 1. Mængder En mængde er

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Selvstudium 1, Diskret matematik

Selvstudium 1, Diskret matematik Selvstudium 1, Diskret matematik Matematik på første studieår for de tekniske og naturvidenskabelige uddannelser Aalborg Universitet I dette selfstudium interesserer vi os alene for tidskompleksitet. Kompleksitet

Læs mere

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Kursusgang 8 OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Matematik Arkæologi Eksempel Semantik Bims (Basic Imperative Statements / Begrænset Imperativt Sprog) Abstrakt syntaks Transitionssystemer

Læs mere

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning It og informationssøgning Forelæsning 2 13. september 2006 Nils Andersen Underprogrammer og betingelser Standardfunktioner, typeomsætning Funktionskald Moduler, lange navne Brugerdefinerede funktioner

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 2. maj 200. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 0205. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af

Læs mere

Ja! det beviste vi uge 16+17

Ja! det beviste vi uge 16+17 Ugens emner Lukketheds- og afgørlighedsegenskaber [5.3-5.5] lukkethed under,,,, * lukkethed under homomorfi og invers homomorfi pumping -lemmaet beslutningsproblemer: membership, emptiness, finiteness

Læs mere

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer

Læs mere

Appendiks 6: Universet som en matematisk struktur

Appendiks 6: Universet som en matematisk struktur Appendiks 6: Universet som en matematisk struktur En matematisk struktur er et meget abstrakt dyr, der kan defineres på følgende måde: En mængde, S, af elementer {s 1, s 2,,s n }, mellem hvilke der findes

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Om begrebet relation

Om begrebet relation Om begrebet relation Henrik Stetkær 11. oktober 2005 Vi vil i denne note diskutere det matematiske begreb en relation, herunder specielt ækvivalensrelationer. 1 Det abstrakte begreb en relation Som ordet

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer

Læs mere

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002 Databaser, efterår 2002 Databasesystemer Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk

Læs mere

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak Introduktion til differentialregning 1 Jens Siegstad og Annegrete Bak 16. juli 2008 1 Indledning I denne note vil vi kort introduktion til differentilregning, idet vi skal bruge teorien i et emne, Matematisk

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Træstrukturer Part III Martin Elsman Datalogisk Institut Københavns Universitet DIKU 3. November, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 3.

Læs mere

Projekt 3.7. Pythagoras sætning

Projekt 3.7. Pythagoras sætning Projekt 3.7. Pythagoras sætning Flere beviser for Pythagoras sætning... Bevis for Pythagoras sætning ved anvendelse af ensvinklede trekanter... Opgave 1: Et kinesisk og et indisk bevis for Pythagoras sætning...

Læs mere