Moderne Funksjonell Programmering i Lisp
|
|
- Gaute Arnesen
- 6 år siden
- Visninger:
Transkript
1 Moderne Funksjonell Programmering i Lisp Lars Tveito 11. mai, 2017 Institutt for Informatikk, University of Oslo
2 Introduksjon
3 Abstract Vi skal utforske programmeringsspråket Clojure, en moderne Lisp-dialekt. Språket ønsker å oppnå bekymringsfri håndtering av samtidighet (eng: concurrency), et svært sentralt problem i moderne programvareutvikling. Clojure favoriserer ikke-muterbar data og rene funksjoner. Vi skal se hvordan Clojure utvider tradisjonelle Lisp-dialekter med ikke-muterbare implementasjoner av lister, vektorer og hashmaps som samles under begrepet persistente datastrukturer. Videre skal vi se hvordan Clojure utnytter tre referansetyper med ulik semantikk for samtidighet sammen med persistente datastrukturer for å oppnå gode og pragmatiske løsninger for samtidighet. Til slutt skal vi se at Clojure er et språk for hipstere med kule briller og GitHub-logo som dekker det halvspiste eplet. Clojurescript er Clojure som kompileres til Javascript og kan dermed brukes til utvikling av web-apps, samt bygge native mobilapplikasjoner for Android og ios! Dette er ikke pensum for INF2810. Det er allikevel fryktelig interessant. 1
4 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng 1
5 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på 1
6 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på Clojure er (i likhet med Scheme) dynamisk typet 1
7 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på Clojure er (i likhet med Scheme) dynamisk typet Clojure favoriserer rene funksjoner på ikke-muterbar data 1
8 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på Clojure er (i likhet med Scheme) dynamisk typet Clojure favoriserer rene funksjoner på ikke-muterbar data Clojure forsøker å løse problemer mht. samtidighet (eng: concurrency) 1
9 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på Clojure er (i likhet med Scheme) dynamisk typet Clojure favoriserer rene funksjoner på ikke-muterbar data Clojure forsøker å løse problemer mht. samtidighet (eng: concurrency) Clojure er laget av Rich Hickey en gud blant mennesker 1
10 Litt om Clojure Clojure dukket for 10 år siden og lansert i 2009 Dette er ganske nytt i programmeringsspråksammenheng Clojure er bygget på Java Alt fra Java kan kalles på Clojure er (i likhet med Scheme) dynamisk typet Clojure favoriserer rene funksjoner på ikke-muterbar data Clojure forsøker å løse problemer mht. samtidighet (eng: concurrency) Clojure er laget av Rich Hickey en gud blant mennesker 1
11 Men først, litt kode fra oblig1a 2
12 Men først, litt kode fra oblig1a Oppgave 3 (a) (defn add1 [n] (+ n 1)) Oppgave 3 (b) (defn plus [n m] (if (zero? m) n (add1 (plus n (sub1 m))))) (defn sub1 [n] (- n 1)) Oppgave 3 (c) (defn plus [n m] (if (zero? m) n (recur (add1 n) (sub1 m)))) 2
13 Men først, litt kode fra oblig1a (forts.) Oppgave 3 (e) (defn fib ([n] (fib 1 0 n)) ([a b count] (if (zero? count) b (recur (+' a b) a (dec count))))) 3
14 Men først, litt kode fra oblig1a (forts.) Oppgave 3 (e) i Clojure-stil (defn fib [n] (let [fib-step (fn [[a b]] [b (+' a b)]) fibs (iterate fib-step [1 1])] (first (nth fibs n)))) 4
15 Men først, litt kode fra oblig1a (forts.) Oppgave 3 (e) i Clojure-stil (defn fib [n] (let [fib-step (fn [[a b]] [b (+' a b)]) fibs (iterate fib-step [1 1])] (first (nth fibs n)))) Enda mer Clojure-stil (defn fib [n] ( (fn [[a b]] [b (+' a b)]) (iterate [1 1]) (nth n) first)) 4
16 Persistente datastrukturer
17 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv 5
18 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs 5
19 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) 5
20 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) Clojure har ikke-muterbare og persistente implementasjoner av 5
21 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) Clojure har ikke-muterbare og persistente implementasjoner av Lister (1 2 3) 5
22 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) Clojure har ikke-muterbare og persistente implementasjoner av Lister Vektorer (1 2 3) [1 2 3] 5
23 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) Clojure har ikke-muterbare og persistente implementasjoner av Lister Vektorer Mengder (1 2 3) [1 2 3] #{1 2 3} 5
24 Persistente Datastrukturer En datastruktur er persistent hvis den ikke ødelegger gamle versioner av seg selv Scheme sine lister er persistente fordi et kall på (cons x xs) ikke påvirker xs (men ikke hvis du bruker set-car! eller set-cdr!!) Clojure har ikke-muterbare og persistente implementasjoner av Lister (1 2 3) Vektorer [1 2 3] Mengder #{1 2 3} Hashmaps {:a 1, :b 2, :c 3} 5
25 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
26 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
27 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
28 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
29 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
30 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } (conj {:a 1 :b 2 :c 3} [:d 4]) => {:a 1, :b 2, :c 3, :d 4} 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
31 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } (conj {:a 1 :b 2 :c 3} [:d 4]) => {:a 1, :b 2, :c 3, :d 4} count hvor mange ting er i samlingen? 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
32 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } (conj {:a 1 :b 2 :c 3} [:d 4]) => {:a 1, :b 2, :c 3, :d 4} count hvor mange ting er i samlingen? De kan brukes som sekvenser 1 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
33 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } (conj {:a 1 :b 2 :c 3} [:d 4]) => {:a 1, :b 2, :c 3, :d 4} count hvor mange ting er i samlingen? De kan brukes som sekvenser 1 map, filter, reduce og mange flere 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
34 Persistente Datastrukturer (forts.) Alle datastrukturer i Clojure støtter conj en mer generell cons (conj '(1 2 3) 4) => ( ) (conj [1 2 3] 4) => [ ] (conj #{1 2 3} 4) => #{ } (conj {:a 1 :b 2 :c 3} [:d 4]) => {:a 1, :b 2, :c 3, :d 4} count hvor mange ting er i samlingen? De kan brukes som sekvenser 1 map, filter, reduce og mange flere For hashmaps får vi en liste på formen ([:a 1] [:b 2] ) 1 De implementerer ISeq interfacet, som kan minne om Itrable fra Java. 6
35 Persistente Datastrukturer (forts.) Persistente datastrukturer baserer seg på strukturell deling 2 xs d b g a c f h 2 By The original uploader was VineetKumar at English Wikipedia - Transferred from en.wikipedia to Commons by sevela.p., CC BY-SA 3.0, 7
36 Persistente Datastrukturer (forts.) Persistente datastrukturer baserer seg på strukturell deling 2 xs xs ys d b d g d g b g a c f f h a c f h e 2 By The original uploader was VineetKumar at English Wikipedia - Transferred from en.wikipedia to Commons by sevela.p., CC BY-SA 3.0, 7
37 Persistente Datastrukturer (forts.) Lister O(1) for endring i begynnelsen (conj '(1 2 3) 4) O(n) for oppslag (nth '( ) 2) Egner seg når man skal traversere hele 8
38 Persistente Datastrukturer (forts.) Lister O(1) for endring i begynnelsen (conj '(1 2 3) 4) O(n) for oppslag (nth '( ) 2) Egner seg når man skal traversere hele Vektorer O(1) for innsetting på slutten (conj [1 2 3] 4) O(1) for oppslag ([ ] 2) O(1) for (ikke destruktiv) endring (assoc [ ] 3 4) Egner seg når man bryr seg om posisjon trenger raskt oppslag 8
39 Persistente Datastrukturer (forts.) Mengder O(1) for innsetting (conj #{1 2 3} 4) O(1) for sjekk av medlemskap (#{1 2 3} 3) Egner seg når du bryr deg om noe er i mengden eller ikke 9
40 Persistente Datastrukturer (forts.) Mengder O(1) for innsetting (conj #{1 2 3} 4) O(1) for sjekk av medlemskap (#{1 2 3} 3) Egner seg når du bryr deg om noe er i mengden eller ikke Hashmaps O(1) for innsetting (assoc {:a 1} :b 2) O(1) for oppslag ({:a 1, :b 2} :b) O(1) for (ikke destruktiv) endring (dissoc {:a 1 :b 2} :b) Egner seg når du trenger en assosiativ datastruktur 9
41 INF1010 Oblig i Clojure
42 Legg til Sortert (ns inf1010-oblig4.core (:require [clojure.core.reducers :as r])) (defn split [xs x] (split-with (comp neg? #(compare % x)) xs)) (defn add-sorted [xs x] (let [[smaller larger] (split xs x)] (reduce into [] [smaller [x] larger]))) 10
43 Fletting (defn merge-sorted ([] []) ([xs ys] (merge-sorted xs ys [])) ([xs ys res] (let [x (first xs) y (first ys)] (cond (empty? xs) (into res ys) (empty? ys) (into res xs) (neg? (compare x y)) (recur (rest xs) ys (conj res x)) :else (recur xs (rest ys) (conj res y)))))) 11
44 Sortering Sekvensiell sortering (defn single-threaded-sort [xs] (reduce add-sorted [] xs)) 12
45 Sortering Sekvensiell sortering (defn single-threaded-sort [xs] (reduce add-sorted [] xs)) Parallellisert sortering (defn threaded-sort [xs n] (let [chunk-size ( xs count (quot n) inc)] (r/fold chunk-size merge-sorted add-sorted xs))) 12
46 Tilstandsendring i Clojure
47 Verdier, Identitet og Tilstand En verdi er noe som ikke endrer seg 13
48 Verdier, Identitet og Tilstand En verdi er noe som ikke endrer seg Tallet 2 og 11. mai er verdier, men et Java-objekt er ikke det 13
49 Verdier, Identitet og Tilstand En verdi er noe som ikke endrer seg Tallet 2 og 11. mai er verdier, men et Java-objekt er ikke det Clojure skiller mellom identitet og tilstand 13
50 Verdier, Identitet og Tilstand En verdi er noe som ikke endrer seg Tallet 2 og 11. mai er verdier, men et Java-objekt er ikke det Clojure skiller mellom identitet og tilstand En identitet er en stabil logisk enhet som har en serie av verdier over tid 13
51 Verdier, Identitet og Tilstand En verdi er noe som ikke endrer seg Tallet 2 og 11. mai er verdier, men et Java-objekt er ikke det Clojure skiller mellom identitet og tilstand En identitet er en stabil logisk enhet som har en serie av verdier over tid En tilstand er en verdi ved et gitt tidspunkt 13
52 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme 14
53 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme Lite idiomatisk og sjeldent brukt 14
54 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme Lite idiomatisk og sjeldent brukt Vi har tre forskjellige referansetyper, som har andledes semantikk mht. concurrency 14
55 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme Lite idiomatisk og sjeldent brukt Vi har tre forskjellige referansetyper, som har andledes semantikk mht. concurrency Refs synkron og koordinert tilstandsendring 14
56 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme Lite idiomatisk og sjeldent brukt Vi har tre forskjellige referansetyper, som har andledes semantikk mht. concurrency Refs synkron og koordinert tilstandsendring Atoms synkron og ukoordinert tilstandsendring 14
57 Referansetyper Trådlokale variabler kan endres med set!, tilsvarende Scheme Lite idiomatisk og sjeldent brukt Vi har tre forskjellige referansetyper, som har andledes semantikk mht. concurrency Refs synkron og koordinert tilstandsendring Atoms synkron og ukoordinert tilstandsendring Agents asynkron og ukoordinert tilstandsendring 14
INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering
INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Stephan Oepen Universitetet i Oslo 30. mars 2017 Forrige forelesning 2 Mer om (prosedyre)navn, bindinger, og verditilordning Nok en ny abstrakt
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.
INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.
INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.
INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen
DetaljerINF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet
INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner
DetaljerINF2810: Funksjonell Programmering. Strømmer og utsatt evaluering
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Erik Velldal Universitetet i Oslo 5. april 2016 Forrige forelesning Mer om (prosedyre)navn, bindinger,
DetaljerINF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet
INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner
DetaljerINF2810: Funksjonell Programmering. Kommentarer til prøveeksamen
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Kommentarer til prøveeksamen Erik Velldal Universitetet i Oslo 1: Grunnleggende (6 poeng)? (define foo '(a b))? (define bar foo)? (set!
DetaljerINF2810: Funksjonell Programmering. Eksamensforberedelser
INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng
DetaljerINF2810: Funksjonell Programmering. Mengder og lokal tilstand
INF2810: Funksjonell Programmering Mengder og lokal tilstand Stephan Oepen & Erik Velldal Universitetet i Oslo Kvinnedagen, 2013 Forrige gang 2 Dagens dont 3 Del 1 Litt mer om hierarkisk data. Representasjon
DetaljerINF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular
DetaljerINF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013 Tema 2 Forrige uke Representasjon av mengder Sorterte
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013 Tema 2 Forrige uke Representasjon av mengder Sorterte
DetaljerINF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 2. februar 2017 Agenda 2 Forrige uke Substitusjonsmodellen og evalueringsstrategier. Blokkstruktur
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Stephan oepen Universitetet i Oslo 6. april 2017 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering I dag Uendelige
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Erik Velldal Universitetet i Oslo 12. april 2016 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering Uendelige sekvenser
DetaljerINF2810: Funksjonell Programmering. Lokale variabler. Og trær.
INF2810: Funksjonell Programmering Lokale variabler. Og trær. Erik Velldal Universitetet i Oslo 11. september 2019 Tema forrige uke 2 Lister som datastruktur quote Rekursjon på lister Høyereordens prosedyrer
DetaljerINF2810: Funksjonell Programmering. Lokale variabler. Og trær.
INF2810: Funksjonell Programmering Lokale variabler. Og trær. Erik Velldal Universitetet i Oslo 11. september 2019 Tema forrige uke 2 Lister som datastruktur quote Rekursjon på lister Høyereordens prosedyrer
DetaljerINF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Trær og mengder Erik Velldal Universitetet i Oslo 19. februar 2015 Tema Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Stephan oepen Universitetet i Oslo 6. april 2017 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering I dag Uendelige
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Erik Velldal Universitetet i Oslo 12. april 2016 Tema Forrige gang Ny datastruktur, ny teknikk: Strømmer
DetaljerRekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo
INF2810: Funksjonell programmering Rekursjon og lister Stephan Oepen & Erik Velldal Universitetet i Oslo 1. februar, 2013 Agenda 2 Forrige uke Scheme Substitusjonsmodellen Blokkstruktur Predikater Kondisjonale
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens
DetaljerINF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens
DetaljerINF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 15. mars 2016 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
DetaljerINF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 5. februar 2015 Agenda Forrige uke Substitusjonsmodellen og evalueringsstrategier.
DetaljerINF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2016 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister
DetaljerINF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 7. mai 2015 Tema Forrige uke SICP 4.1. Structure and interpretation
DetaljerINF2810: Funksjonell Programmering. Strømmer
INF2810: Funksjonell Programmering Strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 12. april 2013 Tema 2 Forrige uke Litt mer i dybden om køer Eksperiment: live-programmering Tabeller som hierarkiske
DetaljerINF2810: Funksjonell Programmering. Strømmer
INF2810: Funksjonell Programmering Strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 12. april 2013 Tema 2 Forrige uke Litt mer i dybden om køer Eksperiment: live-programmering Tabeller som hierarkiske
DetaljerINF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal Universitetet i Oslo 28. mai 2015 I dag Kort oppsummering Praktisk om eksamen Hvem
DetaljerINF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 18. mai 2017 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen
DetaljerINF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon
INF2810: Funksjonell Programmering Dataabstraksjon og Trerekursjon Stephan Oepen & Erik Velldal Universitetet i Oslo 15. februar, 2013 Tema 2 Forrige uke Høyere-ordens prosedyrer: Prosedyrer som argumenter
DetaljerINF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 18. mai 2017 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen
DetaljerHøyere-ordens prosedyrer
INF2810: Funksjonell programmering Høyere-ordens prosedyrer Stephan Oepen & Erik Velldal Universitetet i Oslo 8. februar, 2013 Tema 2 Forrige uke Lister og listerekursjon Høyere-ordens prosedyrer Prosedyrer
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 1. mars 2018 Forrige gang 2 Kode som trær 3 Ved evaluering oversettes kildekoden i et språk først til et
DetaljerINF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag Kort oppsummering Praktisk
DetaljerINF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 26. februar 2015 Forrige gang 2 I dag Vi blar om til kapittel 3 i SICP.
DetaljerINF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2017 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister
DetaljerINF2810: Funksjonell Programmering. Mer om strømmer
INF2810: Funksjonell Programmering Mer om strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 19. april 2013 Tema 2 Forrige uke Repetisjon: parallelitet Noe helt nytt: strømmer Noe quizzaktivitet
DetaljerINF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 19. april 2016 Tema 2 Forrige uke Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær
DetaljerINF2810: Funksjonell Programmering. Mer om strømmer
INF2810: Funksjonell Programmering Mer om strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 19. april 2013 Tema 2 Forrige uke Repetisjon: parallelitet Noe helt nytt: strømmer Noe quizzaktivitet
DetaljerINF2810: Funksjonell programmering: Introduksjon
INF2810: Funksjonell programmering: Introduksjon Stephan Oepen & Erik Velldal Universitetet i Oslo 18. januar, 2013 Tema for i dag 2 Introduksjon Praktiske detaljer Pensum Obliger Lærebok Hva skal vi lære?
Detaljer(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))
Oppgave 1 For å komme nærmere kuberoten (tredjeroten) til et tall x fra en foreløpig tilnærming y, kan vi bruke formelen (2y + x/y 2 )/3. Skriv prosedyrene (nær-nok-kuberot? y x), (nærmere-kuberot y x)
DetaljerLISP PVV-kurs 25. oktober 2012
LISP PVV-kurs 25. oktober 2012 Hva er Lisp? Grunnleggende konsepter Variabler (Pause) Lister Løkker Funksjoner Oversikt over kurset Først: Få tak i en implementasjon av Common Lisp Mange implementasjoner
DetaljerINF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 27. april 2017 Tema 2 Forrige forelesning Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær
DetaljerINF2810: Funksjonell Programmering. En metasirkulær evaluator
INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer
DetaljerINF2810: Funksjonell Programmering. En metasirkulær evaluator
INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer
DetaljerDet finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten
Interface, Abstract Class... i-120 : H-98 2a. Abstraksjon i JAVA: 1 Det finnes ingenting som kan gjøres med interface i-120 : H-98 2a. Abstraksjon i JAVA: 2 som kan gjøres med bruk av unntak i-120 : H-98
DetaljerINF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2
INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer
DetaljerINF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2
INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer
DetaljerInnlevering 2b i INF2810, vår 2017
Innlevering 2b i INF2810, vår 2017 Dette er del to av den andre obligatoriske oppgaven i INF2810. Man kan oppnå 10 poeng for oppgavene i 2b, og man må ha minst 12 poeng tilsammen for 2a + 2b for å få godkjent.
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 2. mars 2017 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 8. mars 2016 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: Fredag 5. juni 2015 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider (ikke medregnet denne siden)
DetaljerVi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven
SLI 230 - side 2 av 8 EKSAMENSOPPGAVE - SLI 230 - VÅR 2000 Nedenfor følger eksamensoppgaver i SLI 230. Først om oppgavene Bakerst følger to sider med hjelp slik det er avtalt - liste over primitiver fra
DetaljerListe som abstrakt konsept/datatype
Lister Liste som abstrakt konsept/datatype Listen er en lineær struktur (men kan allikevel implementeres ikke-lineært bak kulissene ) Hvert element har en forgjenger, unntatt første element i listen Hvert
DetaljerLisp 3: Spesielle former, variabler, imperativ programmering
Lisp 3: Spesielle former, variabler, imperativ programmering Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Evaluering av former) (De spesielle operatorene)
DetaljerHva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen
Lister Hva er en liste? Listen er en lineær datastruktur Hvert element har en forgjenger, unntatt første element i listen Hvert element har en etterfølger, unntatt siste element i listen I motsetning til
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 5. juni, 2014 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider. Vedlegg: Ingen Tillatte hjelpemidler:
DetaljerINF2810: Funksjonell Programmering. Introduksjon
INF2810: Funksjonell Programmering Introduksjon Erik Velldal Universitetet i Oslo 18. januar 2018 Tema for i dag 2 Introduksjon Lærebok Hva skal vi lære? Praktisk informasjon Grupper Obliger Canvas Scheme
DetaljerINF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 9. mars 2017 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
DetaljerINF2810: Funksjonell programmering: Introduksjon
NF2810: Funksjonell programmering: ntroduksjon Stephan Oepen & Erik Velldal Universitetet i Oslo 18. januar, 2013 Tema for i dag 2 ntroduksjon Praktiske detaljer Pensum Obliger Lærebok Hva skal vi lære?
DetaljerIN1010 våren januar. Objektorientering i Java
IN1010 våren 2018 23. januar Objektorientering i Java Om enhetstesting Om arrayer og noen klasser som kan ta vare på objekter Stein Gjessing Hva er objektorientert programmering? F.eks: En sort boks som
DetaljerINF2810: Funksjonell Programmering. Introduksjon
INF2810: Funksjonell Programmering Introduksjon Stephan Oepen Universitetet i Oslo 19. januar 2019 Nummer 2 2 Erik Velldal Nummer 2 2 Erik Velldal Hver tar halvparten av forelesningene; hyppig bytte frem
DetaljerINF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Stephan Oepen Universitetet i Oslo 2. februar 2016 Agenda 2 Forrige uke Substitusjonsmodellen og evalueringsstrategier Blokkstruktur
DetaljerHva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen
Lister Hva er en liste? Listen er en lineær datastruktur Hvert element har en forgjenger, unntatt første element i listen Hvert element har en etterfølger, unntatt siste element i listen I motsetning til
DetaljerINF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 9. mars 2017 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
DetaljerAlgDat 12. Forelesning 2. Gunnar Misund
AlgDat 12 Forelesning 2 Forrige forelesning Følg med på hiof.no/algdat, ikke minst beskjedsida! Algdat: Fundamentalt, klassisk, morsomt,...krevende :) Pensum: Forelesningene, oppgavene (pluss deler av
DetaljerINF1010 våren januar. Objektorientering i Java
INF1010 våren 2017 25. januar Objektorientering i Java Om enhetstesting (Repetisjon av INF1000 og lær deg Java for INF1001 og INF1100) Stein Gjessing Hva er objektorientert programmering? F.eks: En sort
DetaljerArray&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister
Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java
DetaljerINF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.
INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen & Erik Velldal Universitetet i Oslo 25. januar, 2013 På blokka 2 Forrige uke Introduksjon og oversikt Funksjonell
DetaljerGjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004
Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004 Oppgave 1 For å komme nærmere kvadratroten til et tall fra en foreløpig tilnærming y, kan vi bruke formelen (y + /y)/2. Dette gir grunnlag for
DetaljerINF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )
INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)
DetaljerIntroduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus
Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus Kategorisering av programmeringsspråk? Deklarativ vs. imperativ Lav nivå vs. høy nivå Kompilert vs. tolket
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg:
DetaljerINF1010 - Seminaroppgaver til uke 3
INF1010 - Seminaroppgaver til uke 3 Oppgave 1 I denne oppgaven skal vi lage et klassehiearki av drikker. Alle klassene i hiearkiet skal implementere følgende grensesnitt p u b l i c i n t e r f a c e Drikkbar
DetaljerArray&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre
Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java
DetaljerLisp 2: Lister og funksjoner
Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister)... lists are the heart of Lisp... Guy L. Steele Jr. (Par)
DetaljerSideeekter og makroer i Lisp
Sideeekter og makroer i Lisp PVV-kurs 18. mars 2010 Oversikt over kurset (Del 4: Imperativ programmering (utsatt fra forrige kurs)) (Del 5: Makroer) (Del 6: Eksempel: Postmodern) Eirik Alderslyst Nygaard
DetaljerNITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013
NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 20 ette løsningsforslaget er til tider mer detaljert enn det man vil forvente av en eksamensbesvarelse. et er altså ikke et eksempel
DetaljerLøsningsforslag Test 2
Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.
DetaljerSide 1. Oppgave 1. Prosedyrer 1.1. Prosedyrene f og g skal begge returnere prosedyrer. a. Skriv f slik at ((f a) b) returnerer summen av a og b.
Side 1 Oppgave 1. Prosedyrer 1.1. Prosedyrene f og g skal begge returnere prosedyrer. a. Skriv f slik at ((f a) b) returnerer summen av a og b. (define (f a) (lambda (b) (add a b ))) b. Skriv g, uten å
DetaljerGeneriske mekanismer i statisk typede programmeringsspråk
Generiske mekanismer i statisk typede programmeringsspråk Dette stoffet er Pensum, og det er bare beskrevet her Mye her er nok kjent stoff for mange INF5110 7. mai 2013 Stein Krogdahl 1 Hvordan kunne skrive
DetaljerINF1010 våren Grensesnitt
INF1010 våren 2013 Torsdag 24. januar Grensesnitt Stein Gjessing Institutt for informatikk Dagens tema n n Norsk: Grensesnitt Engelsk: Interface n Les notatet Grensesnitt i Java av Stein Gjessing 2 Hva
Detaljer1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)
Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)
DetaljerVariable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.
ML (kap 5 og 6) Variable i ML Nye datatyper Currying Avanserte listeoperatorer Typeanalyse Variable Man kan bruke variable i ML - val = ref 1; val = ref 1 : int ref - := 3*(!)+5; val it = () : unit -!;
DetaljerHva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først
Køer Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid
DetaljerIntroduksjon til programmering og programmeringsspråk
Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus https://code.org/ Veldig høy-nivå programmering med Scratch End-user programming Overtone, Tidal, etc., bygger
DetaljerOPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?
OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.
DetaljerINF Algoritmer og datastrukturer
INF2220 - Algoritmer og datastrukturer HØSTEN 2017 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 4: Prioritetskø og Heap Ingrid Chieh Yu (Ifi, UiO) INF2220 H2017, forelesning
DetaljerINF2810: Funksjonell Programmering. Eksamensforberedelser
INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng
DetaljerHvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010
Hvorfor sortering og søking? Man bør ha orden i dataene umulig å leve uten i informasjonssamfunnet vi blir fort lei av å lete poleksempel internett alt er søking og sortering alternativer til sortering
DetaljerLogaritmiske sorteringsalgoritmer
Logaritmiske sorteringsalgoritmer Logaritmisk sortering Rekursive og splitt og hersk metoder: Deler verdiene i arrayen i to (helst) omtrent like store deler i henhold til et eller annet delingskriterium
DetaljerINF2810: Funksjonell Programmering. Introduksjon
NF2810: Funksjonell programmering NF2810: Funksjonell Programmering ntroduksjon Erik Velldal Universitetet i Oslo 22. januar 2015 Tema for i dag ntroduksjon Praktiske detaljer Grupper Obliger Lærebok Hva
Detaljer