Föreläsning 8 i programmeringsparadigm. Kommentarer kring schacklabben.
|
|
- Lucas Henriksson
- för 6 år sedan
- Visningar:
Transkript
1 Föreläsning 8 i programmeringsparadigm. Kommentarer kring schacklabben. Om man vill kontrollera hur mycket man skrivit i sina Haskell-moduler man köra unix-kommandot wc (word count):..> wc.hs Chess.hs ChessGraphics.hs Chessman.hs PlayChess.hs PolygonGraphics.hs Square.hs Vector.hs total Dvs min lösning har 461 rader, 2415 ord eller tecken. Skulle vi kunna gjort på ett bättre sätt, skulle ett kortare program varit bättre? Min lösning är programmerad med moduler som innehåller ADT för modellen av schacket (Square, Chessman, Chess och Vector), funktioner för vyn av typen..>[graphic] (ChessGraphics.hs, PolygonGraphics.hs) huvudfunktionen main::io () (PlayChess.hs) Detta sätt att utforma program/skript i olika paradigm rekommenderas i många böcker, man skriver många moduler som ofta implemterar en ADT och försöker få gränsnitten (engelska interface) så enkla som möjlig för att modulerna skall vara maximalt oberoende och individuellt modifierbara och kunna skrivas av olika personer. Gränsnitten i Haskell programmeras ju i Haskell med exportlistorna, i Javaklasser med private och public. Ju större ett projekt är, desto viktigare är detta arbetsätt. Våra ADT i Haskell implementerar nya typer vars värden vi kan använda i andra moduler. Lite grann kan vi säga att vi skapar ett schack-språk för att kunna programmera schack-problem. En ADT motsvarar i stort sett vad som matematiker kallar en algebra. Även programmering med Java brukar karakteriseras som programmering med abstrakta datatyper, och en java-klass är ju visserligen en typ i Java men instanserna är oftast modifierabara objekt, ej värden. Det blir dock mer att skriva om man gör på detta sätt. Till exempel kunde vi nöjt oss med att låta ett schack vara i stället för en lista med par av typen [(Square, Chessman)] eller t o m [((Int, Int), Chessman)] om vi struntar att skriva ADT Square data Chess = Chess [(Square, Chessman)] -- ev newtype
2 Programmeringen av många funktioner i Chess skulle då vara enklare, speciellt för den oerfarne, eftersom vi direkt skulle kunns använda alla funktioner för listor och skulle slippa skriva konstruktorn Chess på en massa ställen för skapa ny värden, mönsterpassa eller "plocka ut listan ur typen". Vi skulle slippa sånt som mönster(chess ((sq,cm):sqcms))) lokala bindningar let Chess((sq,cm):sqcms)) = new Chess (Chess...) i högerleden hjälpfunktioner och många slarvfel, parantesfel mm. Vidare skulle också vi kunna skriva alltihop i en enda modul, låta Haskell typa alla funktioner i stället för att själv skriva funktionernas typer, använda lamda-uttryck och stunta i kommentarer och blanka rader. Vårt schackprogram skulledå antagligen kunna skrivas med mindre än 200 rader, kanske mindre än 100 rader. Om man försöker skriva större program med sådan teknik bör man nog vara mycket skärpt och jobba helt ensam med projektet (och slippa jobba med det efter några år då man jobbat med annat). En kompromiss-metod är att använda typsynonymer, t ex type Chess = [(Square, Chessman)] Ett lite svårare exempel. ZipWith. De flesta exempel vi hittills sett har enkelt kunna programmeras med rekursion på ett ganska mekaniskt sätt, med listomfattning eller med lämplig funktion från Preluden. Ibland är det lite svårare, det kan krävas lite mer sofistikerad rekursion till exempel. Se t ex Hutton 6.3, 6.4, 6.5. Låt oss programmera zipwith som parar ihop element från två listor med en funktion. T ex Typen blir zipwith () [1,3,2] [14, 22, 44] blir [15, 25, 46] zipwith :: (a->b->c) -> [a]->[b]->[c] Eftersom två listor, som båda kan konstueras mpå två sätt med : samt [], är inblandade förutom slutresultatlistan får vi 22 = 4 fall i mallen. Sedan vi fyllt i högerleden får vi zipwith _ [] [] = [] zipwith _ (a:as) [] = [] zipwith _ [] (b.bs) = [] zipwith z (a:as) (b:bs) = z a b : zipwith z as bs Efter lite eftertanke kan vi komma fram till Preludens lite kortare definition: zipwith :: (a->b->c) -> [a]->[b]->[c] zipwith z (a:as) (b:bs) = z a b : zipwith z as bs zipwith _ = [] Jag tror faktiskt att Hutton inte tänkt riktig klart vid programmering av zip i avsnitt 6.3 sid 69.
3 Läsanvisning för funktionell programmering. Hela Hutton-häftet inklusive utdraget ur A gentle Introduction to Haskell ingår i kursen. Det enda som jag inte tycker om i Huttons bok boken är mönster av typen n1. En del av exemplen, ofta i slutet av kapitlen, kan du läsa om du vill få illustrerat hur man tänker, men kan ju också hoppas över eller läsas kursivt, t ex avsnitt 5.5, avsnitt 7.6. Kapitel 12 om lat evaluering kommer jag strax att tala om på ett lite annat sätt än vad Hutton gör, och kommer jag inte att ställa svårare frågor om lat evaluering. Kapitlet kan läsas kursivt. Det jag gjort utöver vad som behandlas i Hutton-häftet är främst IO-programmering (se labhäftet och föreläsning 6) och mer ingående om typklasser (föreläsning 7). När vi senare i kursen studerar syntaxanalys, efter det av vi behandlat logikprogrammering, kommer vi att använda Haskell igen. På tentamen försöker jag ge en del uppgifter som liknar vad man gjort när man labbat. Lat evaluering. (Hutton kapitel 12, Fokker 3.2.5, sid 48-51). Haskell och "moderna" funktionella språk har lat evaluering. Jag har några ex av Björn vonsydow: Datastrukturer i Haskell" (48 s). Mycket trevlig läsning som bland annat tar upp mer om hur Haskell fungerar, lat evluering och effektivitetssynpunkter. Har används på Chalmers i fortsättningskursen i programmering. I Haskell "körs" programmen genom att vi beräknar ( == ger värden till == evaluerar) uttryck. Uttryck kan skrivas som teckensträngar eller som träd (upp-och-nedvända, praxis i datalogi) : (14 4) (1 22) square (12) $ square 1 2 $ == applikation Evalueringen kan skrivas om omskrivningar/omritningar (==förenklingar, == reduktioner) av deluttryck (ett redex, reducible expression) / delträd. Ibland finns det flera redex att välja på. Två olika strategier: använda "innersta" redex (redex som inte innehåller andra redex) / förenkla trädet från löven använda bästa "yttersta" redex (om möjligt redex inte i redex)/ förenkla trädet från roten. Ett exempel på nästa sida :
4 square (12) $ square 1 2 För komma vidare måste vi ha def på square (\n -> n n) (12) \n -> n n $ 1 2 Vi räknar ut argumentet (\n -> n n) 3 \n -> n n Applicerar $ Multiplicerar Innermost evaluation (Function call-by-name) Applicerar.. (12) Vi tvingas addera, strict Applicerar (12) (12) Vi tvingas addera, strict (3) (12) Multiplicerar Vi tvingas addera, strict (3) (3) Multiplicerar 9 Lazy evaluation 9 Outermost evaluation, (Function call-by-name)
5 Innermost evaluation, som också kallas strikt evaluering eller eager evluation, är det vanligaste i imperativa språk och upplevs nog som det självklara sättet av de flesta. Emmellertid är icke-strirkt evaluering bättre om vissa redex/delträd aldrig behöver evalueras eller vid rekursion som kan ge oändlig rekursion. Outermost evaluation på ett naivt sätt (längst till höger på föregående sida), kan ge ineffektiva program pga att vissa uttyck beräknas flera gånger. Detta kan dock undvikas med lat evaluering; I datorns minne lagras inte uttrycken direkt utan med referenser (pekare) till uttrycken. Referenser till uttryck från på flera ställen refererar bara till ett enda ställe. Krävs förenkling av uttryck förenklas det då bara en enda gång. Uttrycksträdet blir istället en graf. Lat evaulering gör att program som ibland aldig skulle sluta köras, terminera, med innermost evaluation terminera. Med lat evaluering kan man programmera med rekursiva funktioner utan basfall och med potentiellt oändliga datastrukturer. Ett mycket fiffigt och snabbt sätt att lista Fibonacchi-talen: Talföjden (fibs), talföljdens svans (tail fibs) och svansen av talföljdens svans (tail tail fibs) hänger ihop så här: fibs tail fibs tail tail fibs dvs vi kan definiera en konstant fibs som fibs :: [Integer] fibs = 1 : 1: zipwith () fibs (tail fibs) med Prelude-funktionen tail tail (_:xs) :: [a] -> [a] = xs Kör man fibs räknar hugs ut och skriver ut talen i listan i all oänlighet. Vill man ha de 100 första skriver man take 100 fibs Prelude-funktionen take : take :: Int -> [a] -> [a] take n _ n <= 0 = [] take _ [] = [] take n (x:xs) = x : take (n-1) xs Exempel på vad som händer (reservation för fel..)
6 take 5 fibs för att välja ekvation för take 5 måste vi veta mer om fibs, blir take 5. (:) 1 (:) 1 zipwith (). tail. vi kan välja ekvation för take 5, bindningar take 5. (:) binds till x 1 binds till xs (:) 1 zipwith (). tail. 1: take 4. (:) 1 använder högerledet, blir (:) 1 zipwith (). tail. dags för take 4, vi kan välja ekvation för take 4, bindningar 1: 1:take 3. (:) 1 (:) binds till x 1 binds till xs zipwith () tail.. använder högerledet, blir 1: 1:take 3. (:) 1 (:) 1 zipwith (). tail. 1:1: take 3. (:) 1 för att välja ekvation för take 3 måste vi veta mer om zipwith.., och måste då vet räkna ut tail.., blir (:) 1 zipwith ()..
7 använder högerledet för zipwith, blir 1:1:take 3. (:) 1 (:) 1 (:) (1 1) zipwith ().. nu kan vi välja ekvation för take 3, använd högerledet, x binds till 1 1 som räknas ut, xs binds till zipwith... 1:1:2:take 2. (:) 1 (:) 1 (:) 2 zipwith ().. för att välja ekvation för take 2 måste vi veta mer om zipwith.., blir... osv blir 1:1:2:3:5 : take 0 1:1:2:3:5 : []. grafen blir Talen som står längst till vänster i bilderna dvs 1, 1 1, är nog också egentligen pekare in till motsvarande tal i grafen, men jag har skrivit ut dem för att det skall bli tydligare. Märk att användning av tail eller mönsterpassning på mönster av typ x:xs ej innebär att kopior skapas, bara omflyttning av pilar! Dvs minne förbrukas ej! Detta beror på att värden aldrig förändras, vi har ej destruktiv uppdatering i minnet i funktionella språk. Körning av fibs!! 5 skulle fungera på liknande sätt men slutresultatet skulle då bli en enda pekare in i grafen. En del av grafens noder skulle då ej refereras, dvs ej "pekas på", och kan tas bort, varvid ytterligare noder ej refereras, varför de kan tas bort, osv rekursivt. Det görs automatiskt i funktionella språk, liksom i Java, för att spara minne av en skräpsamlare, (engelska garbage collector).
8 The Awkard Squad: Haskell och kod i andra språk. Överkurs. Verkligheten Verkligheten c o n c u r r e n c y. Interaction ( -> IO a) föreläsning 6 Computational Kernel ("Vanlig Haskell") samverkan med kod skriven i andra språk e c r a r t o c r h Verkligheten Verkligheten För att Haskell skall slå igenom krävs också att de fyra "skalbitarna" i bilden ovan finns. I Haskell löses detta med IO a - programmering. Vill man kompilera Haskellprogram (slutresultatet skall då vara main :: IO(), som kan köras direkt fån operativsystmet) är den vanligaste kompilatorn ghc. Till den finns utvidgningar och bibliotek för de alla skalbitarna. Haskell har en standard (senare versioner av ghc och hugs följer den) för att kommunicera med kod skrivna i andra språk, "Foreign Function Interface 1.0 ". Den som är intressarad kan få mer information här: Jag har gjort lite experiment med en tidigare version och fått kod i Haskell att samarbeta med kod i C. Jag har mestadels använt Haskell-kompilatorn ghc/5.04.2, som även kan kompilera c-kod Några axplock bland mina experiment finns på tre underkataloger till /info/progp03/haskellandc/. Kompilerings- och köranvisningar finns i.hs filerna. Kopiera filerna till egen katalog. Vid kompileringarna uppstår en massa nya filer, de körbara filerna blir stora. Lästips : Simon Peyton Jones :Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell (länk finns på kursens startsida). Bland de mer lättlästa artiklana om IO a. Handlar om det som brukar saknas i vanliga Haskell-böcker, och delar av Haskell som ofta är viktiga i "verkliga" projekt. För att komma åt artiklen måste man kunna gunzip.
9 Så här får man tillgång till ghc:..>module add ghc Man kan nu använda ghc interaktivt på detta sätt (mycket likt som man använder hugs, men man kan inte använda SOEGraphics):..>ghci Med ghci kan blanda ett interaktivt körsätt av någon Haskell-module med färdigkompilerad kod för importerade moduler. Vill man göra rena kompileringar skrivar man..>ghc Kompilatorn genererar C-kod, som därefter automatiskt kompileras med C-kompilatorn gcc och laddas med ld. Jag har lärt mig att även blanda in kod som skrivits med C, jag kanske skriver mer om detta i kommande föreläsningshäften. Haskell och Tcl/Tk. Överkurs. Tcl/Tk är, tror jag, C-världens sätt att göra GUI program på samma sätt som man i Java kan göra program med knappar (Buttons) och andra grafiska komponenter. I Bremen har man gjord ett paket HTk i Haskell som använder Tcl/Tk. Jag har lyckats kombinera detta med vår schackmodell från labbarna: Interaction main i PlayChessTcl.. changechess i PlayChessTcl modell Square Chess Chessman vy styrning Computational Kernel ("Vanlig Haskell") Shell -> IO a PlayChessTcl innehåller kod för hela vyn och den interaktiva delen av styrningen. Om du har lust att pröva min PlayChessTcl tillsammans med dina Sqaure, Chess och Chessman så finns programmet på /info/progp03/playchesstcl.hs. Man måste ha kompletterat Chess på det sätt som beskrivs i steg 8 och 9, namnen på vissa fuktioner måste ju stämma osv. Kompilering och laddning tar lång tid, den körbara koden blir 8 MByte, det har varit mycket krångel innan vi fick Htk att funka, så lycka till...
10 Däremot : Den rena Haskell-delen (modellen från SOEGraphics- versionen) var bara att smacka in, det funkade direkt (förståss!?). Hur man kompilerar och laddar står i början av filen Du kan (förhoppningsvis) även köra mitt program som...>setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/pkg/gnu-libs/1.1/lib...>PlayChessTcl Avancerad kurs i funktionella språk. 2D1456, Advanced Functional Programming, 4 credits, D Why should I renounce for you, dear Haskell, My much yearned for side-effects? - Don Smith Course teacher: Course Description Johan Glimming In this course we study functional programming languages from two points of view: 1) their use as foundations for programming languages such as Java, 2) their use in their own right as one of the most powerful programming paradigms. We will study a range of topics, starting with the foundations of lambda calculus (both untyped, typed, and second-order), type inference and the Hindley-Milner type system, type classes, monads, data structures and algorithms in a (purely) functional setting, and finally program transformations, an excellent formal method for development of correct programs from their specifications. Students will have plenty of opportunity to explore advanced functional programming in their mini-projects, examined non-trivial programming exercises. The underlying theory of functional programming is explained in a series of 14 two-hour lectures. Rekomenderas varm! Haskell, paradigmer och multimedia. I denna roliga bok (som jag använde som kursbok i en 5p-kurs i funktionell programmering, kursbok för 2D1456, Advanced Functional Programming) : Paul Hudak: The Haskell School of Expression, Learning Functional programming through multimedia. ISBN används Haskell för att göra animeringar och datorspel i Haskell. Animeringarna ses som värden av typ Time -> [Graphic]. Animeringar och datorspel har ju mycket IO och mycket jämlöpande processer, vilket visar att paradigmgänserna är ganska konstlade. Boken innhåller också avsnitt om robotprogrammering och om musik.
11 Ett lite svårare exempel. Myntväxlingsproblemet. De flesta exempel vi hitills sett har enkelt kunna programmeras med rekursion på ett ganska mekaniskt sätt, med listomfattning eller med lämplig funktion från Preluden. Ytterligare ett exempel. Växla ett belopp till svenska mynt. Exempel på körning av det färdiga programmet : Main> change 2750 "2 tiokronor, en femkrona, 2 kronor och en femtioering" dela upp problemet : change :: Int -> String change = pretty. howmany. (change1 swedcoins) swedcoins :: [Int] swedcoins = [1000, 500, 100, 50] change1 presenterar resultatet på denna form: Main> change ger detta resultat [1000, 1000, 500, 100, 100, 50] howmany. change1 presenterar resultatet på denna form: Main> (howmany.change1) 2750 ger detta resultat [(2,1000), (1,500), (2,100), (1, 50)] Delproblem: change1 : change1 :: [Int] -> Int -> [Int] change1 [] amount = [] change1 (c:cs) amount amount >= c = c : change1 (c:cs) (amount - c) otherwise = change1 cs amount
12 Delproblem: Snyggare resultat med howmany: För att förvandla [1000, 1000, 500, 100, 100, 50] till [(2, 1000), (1, 500), (2,100), (1, 50)] försöker skriver vi en funktion howmany :: [a] -> [(Int, a)] Parametern är en lista; typen lista har två konstuerare : []; vi startar med standardmallen howmany [] = howmany (x:xs) = Icke-rekusiva fallet är lätt, men det rekursiva fallet, vad sakll vi göra med x och rekursionsantagandet (howmany xs)? howmany [] = [] howmany (x:xs) =???? x (howmany xs) Lite svårare! Till exempel ska 100 slås ihop med [(1, 100), (1, 50)] eller 100 slås ihop med [(1, 50)]. Konventionell lösning : Funktionella programmerare definerar funktioner! Definiera en hjälpfunktion addon för????! addon x [] = [(1,x)] addon x ((i,y ) : iys) x == y = (1i, y): iys otherwise = (1, x) : (i,y ) :iys Klart? Nja vid provkörning får vi : ERROR "Money.hs":3 - Cannot justify constraints in explicitly typed binding Expression : howmany Type : [a] -> [(Int,a)] Given context : () Constraints : Eq a Typen är för generell; Vi får byta till howmany :: [a] -> [(Int, a)] howmany :: Eq a => [a] -> [(Int, a)] Klart! Trimmning : Tittar vi på definitionen på howmany ser vi om vi är vana att det är en "vikning", alltså är t ex detta en kortare definition: howmany = foldr addon [] n
13 En sämre lösning: Om vi vill slippa skriva en ny funktion för att programmera det rekursiva högerledet???? x (howmany xs) i den icke-akumulerande lösningen kan vi göra så här (lite imperativt; "först så gör vi rekusionsantagandet och mönsterpassar så vi får ut de delar vi behöver, och sedan är det lättare att skriva det vi vill ") howmany (x:xs) = let (i, y) : iys = howmany xs in if x == y then (1i, y): iys else (1, x) : (i,y ) :iys Hugs protesterar int men när vi provkör får vi fel (Den som inser felet är duktig)..> howmany [2, 2, 2, 3] Program error: {howmany_v1314 []} Problemet är att när vi har ett lista med ett elemnent ; howmany (2:[])passar (x:xs) med x bundet till 2 och med xs bundet till []. Sedan försöker vi göra let in (i, y) : iys = howmany xs dvs, eftersom howmany [] = [], (i, y) : iys = [] vilket inte går. En korrekt lösning måste ha ett basfall till, vilket är svårt att inse: howmany [] = [] howmany (x:[]) = [(1, x)] howmany (x:xs) = let (i, y) : iys = howmany xs in if x == y then (1i, y): iys else (1, x) : (i,y ) :iys En akumulerande lösning på howmany: howmany list = reverse (hm list [])-- reverse annars 50-oering först hm :: Eq a => [a] -> [(Int, a)] -> [(Int, a)] hm [] acc = acc hm (x:xs) [] = hm xs [(1, x)] hm (x:xs) ((i,y ) : iys) x == y = hm xs ((1i, y):iys) otherwise = hm xs ((1, x) : (i,y ) : iys)
14 Delproblem: Resultatet som sträng med pretty : För att förvandla [(2, 1000), (1, 500), (2,100), (1, 50)] till " 2 tiokronor, 1 femkrona, 2 kronor och en femtioöring " Hur gör vi då? Hur formaterarar vi strängar? Med standardfunktioner! Första försök : pretty :: [(Int, Int)] -> String pretty ims = concat [show i " " tocoin m ", " (i, m)<-ims] tocoin :: Int -> String tocoin 1000 = "tiokronor" tocoin 500 = "femkrona" tocoin 100 = "kronor" tocoin 50 = "femtioering" tocoin _ = "" Körning: pretty (howmany [1000, 1000, 500, 100, 100, 50]) ger "2 tiokronor, 1 femkrona, 2 kronor, 1 femtioering, " Ett andra försök : pretty :: [(Int, Int)] -> String pretty ims = concatspec [ fix (i, m) (i, m) <- fix :: (Int, Int) -> String fix (1, 1000) = " en tiokrona" fix (i, 1000) = show i " tiokronor" fix (1, 500) = " en femkrona" fix (i, 500) = show i " femkronor" fix (1, 100) = " en krona" fix (i, 100) = show i " kronor" fix (1, 50) = " en femtioering" fix (i, 50) = show i " femtioeringar" fix _ = "" concatspec :: [String] -> String concatspec [] = "." concatspec (x:[]) = x concatspec (x1:x2:[]) = x1 " och " x2 concatspec (x :xs) = x ", " concatspec xs ims] Körning:..> pretty (howmany [1000, 1000, 500, 100, 100, 50]) ger "2 tiokronor, en femkrona, 2 kronor och en femtioering",
15 Hela programmet: swedcoins :: [Int] swedcoins = [1000, 500, 100, 50] change1 :: [Int] -> Int -> [Int] change1 [] amount = [] change1 (c:cs) amount amount >= c = c : change1 (c:cs) (amount - c) otherwise = change1 cs amount howmany = foldr addon [] n -- ev akumulerande lösning istället where addon x [] = [(1,x)] addon x ((i,y ) : iys) x == y = (1i, y): iys otherwise = (1, x) : (i,y ) :iys pretty ims = concatspec [ fix (i, m) (i, m) <- fix :: (Int, Int) -> String fix (1, 1000) = " en tiokrona" fix (i, 1000) = show i " tiokronor" fix (1, 500) = " en femkrona" fix (i, 500) = show i " femkronor" fix (1, 100) = " en krona" fix (i, 100) = show i " kronor" fix (1, 50) = " en femtioering" fix (i, 50) = show i " femtioeringar" fix _ = "" concatspec :: [String] -> String concatspec [] = "." concatspec (x:[]) = x concatspec (x1:x2:[]) = x1 " och " x2 concatspec (x :xs) = x ", " concatspec xs change :: Int -> String change = pretty. howmany. (change1 swedcoins) ims] För att framhäva hur funktionerna använder varandra skulle man kunna ha lokala definitioner av hjälpfuktioner och få en struktur som change =... where swedcoins =... change1 =... howmany =... where addon =... pretty =... where concatspec =... fix =...
Föreläsning 5 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.
Föreläsning 5 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna. Att arbeta med två fönster. Hugs är ju en tolk (interpreter) vilket har stora fördelar vid programutveckling.
Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.
Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna. Att arbeta med två fönster. Hugs är ju en tolk (interpreter) vilket har stora fördelar vid programutveckling.
Föreläsning 5 i programmeringsparadigm.
Föreläsning 5 i programmeringsparadigm. λ-notation (lamda-notation, anonyma funktioner). Hutton 4.5. (Fokker 2.3.4.) Vi kan om vi vill definiera hjälpkonstanter, t ex i denna funktiondefinition : kommunalskatt
Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006
Leif Kusoffsky 2005 - dec - 07 Nada KTH Kursanalys för Programmeringsparadigm 2D1361, läsperiod 1 och 2 läsåret 2005/2006 Kursdata Momentindelning Kursen genomförd Kursledare Kurslitteratur Antal studenter
DD1361 Programmeringsparadigm. Carina Edlund
DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp
Funktionell programmering DD1361
Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->
Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4.
Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4. filter se Hutton. När man använder filter och map får man ofta glädje av anonyma
Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h
Kungliga Tekniska Högskolan Ämneskod 2D1370 Nada Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h Antalet uppgifter : 4 ( 8p +10p + 10p +12p = 40 p) Lärare, jourhavande lärare
Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.
Föreläsning 8. Typer och programmeringsstil i Haskell. När vi definerade ett schack gjorde vi så här: newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK deriving Show -- newtype effektivare
Enjoy Vattenfallsmodellen i funktionella språk
Föreläsning 2 i Programmeringsparadigm Funktionell programmering := variabler pekare sidoeffekter ;...; Fy, fy => bugfree förståeliga korta inga "satser", bara uttryck! Enjoy Vattenfallsmodellen i funktionella
Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h
Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(6p + 18p +6p+ 20p) + (10p +12p + 8p +10p) = 10p + 50p + 40 p
Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34
Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger
Kap9. Operatorn.. Hudak 9.4 sid 11. Fermats förmodan, eller Fermats stora sats säger att. xm + ym == zm har heltalslösningar om och endast om m == 2.
Föreläsning 6. Hudak kapitel 8, 9, 10, 11, 23, Appendix B. Grafik med klickning. 2D1370 Funktionell programmering v14 torsdag Kap 8. Ett exempel på användning av listomfattningar. Fermats förmodan, eller
Föreläsning 4 (och 5?) i programmeringsparadigm.
Föreläsning 4 (och 5?) i programmeringsparadigm. Högre ordningens funktioner på listor; funktioner som argument: map, filter. (Fokker 3.1.3, C&K p 37, 38) map -- förändra alla element i en lista på samma
Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.
Välkomna till DIT012 IPGO 1 Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1. Lärare och Handledare Kursansvariga, examinatorer, föreläsare och handledare
Enjoy Vattenfallsmodellen i funktionella språk
Föreläsning 2 i Programmeringsparadigm Funktionell programmering := variabler pekare sidoeffekter ;...; Fy, fy => bugfree förståeliga korta inga "satser", bara uttryck! Enjoy Vattenfallsmodellen i funktionella
Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h
Nada Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h Antalet uppgifter : 5 ( 26p +22p + 14p +26p + 12 p= 100 p ) Lärare, jourhavande lärare : Leif Kusoffsky ------------------------------------------------------------------------------------------------------------------
Introduktion till Haskell
Introduktion till Haskell Elias Riedel Gårding NMA11, Teknisk Fysik (KTH) 2014 18 februari 2018 Elias Riedel Gårding (NMA11, F14) Introduktion till Haskell 18 februari 2018 1 / 29 Om Haskell Historik 1927:
Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...
Introduktion till programmering Standardfunktioner Tecken och strängar Utskrifter och effekter Föreläsning 2 Prelude Alla fördefinierade funktioner vi använder definieras i modulen Prelude. Denna modul
Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.
Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1. Användning av Prolog. Haskell kan i princip användas till mycket, men grafiska paket, kopplingar till färdiga
Föreläsning 4 i programmeringsparadigm.
Föreläsning 4 i programmeringsparadigm. OBS! Schemat ändrades den 30 augusti.,om du tryckte ut schemat tidare, märk att det är ingen föreläsning 2005 sept 14 onsdag, däremot 2005 sept 20 13.00 i sal F1.
TDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4
Introduktion till programmering Men först: Några funktioner ur preluden Vad är skillnaden mellan head str och take 1 str? Föreläsning 4 Ett större exempel. head :: [a] -> a take :: Int -> [a] -> [a] tail
Sätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.
Nada Tentamensdag 2004 aug 23 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(5p + 20p +5p+ 20p) + (10p +12p + 8p +10p) = 10p + 50p + 40 p
Föreläsning 4 (och 5?) i programmeringsparadigm.
Föreläsning 4 (och 5?) i programmeringsparadigm. Korrekta bilnummer. Programmet, som visar att man ibland använder smarta mönster för att skriva eleganta program, finns på /info/progp02/haskelllectures/f4.
Föreläsning 8. Hudak kapitel 13. 2D1370 Funktionell programmering v15 torsdag
Föreläsning 8. Hudak kapitel 13. 2D1370 Funktionell programmering v15 torsdag Olika sorters program. Inmatning sker innan exekveringen startar under exekvering När exekvering sker bestäms av datorn "transformerande
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
Senast. Idag. Icke-strikt evaluering. Strikt evaluering. Testa latheten! Lat evaluering. Plus och minus med lat evaluering. Testa latheten!
Senast Idag Högre ordningens funktioner Listomfattning Strikthet och lat evaluering Strömmar Monadisk I/O Strikt evaluering Icke-strikt evaluering Def: Strikt evaluering innebär att alla parametrars värde
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs
Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer
TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng
TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,
Dagens föreläsning Programmering i Lisp Fö 5
Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klassen Mio ffl Särfall ffl Interface Kungl. Tekn. Högskolan
Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk
1 Dagens föreläsning Programmering i Lisp Fö 7 Kopplingen funktionella programmering och diskret matematik. Jämför vad ni hittills gjort i denna kurs och i den diskreta matematiken, med referenser in i
Använda Python Laboration 1 GruDat, DD1344
Använda Python Laboration 1 GruDat, DD1344 Örjan Ekeberg 14 oktober 2008 Målsättning Målet med denna laboration är att du ska prova på att använda Python, framförallt interativt. Du ska också lära dig
I kapitel 15 gör Hudak för reaktiva animeringar detsamma som han i kapitel 13 gör för animeringar. Resultatet är en module Fal.
Föreläsning 9. Hudak avsnitt 15.1, kapitel 14 2D1370 Funktionell programmering v19 tisdag Programmering av reaktiv animering. Vad går kapitel 15 ut på? I kapitel 15 gör Hudak för reaktiva animeringar detsamma
BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK
FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,
Tentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13
Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13 Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 9 10p +( 5p + 14p +15p+ 16p) + (12p +10p + 10p +8p) = 10p + 50p
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.
Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1. Användning av Prolog. Prolog har framför allt används inom AI ( Articifial Intellegence),
Föreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Tentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
Verktyg och Utvecklingsmiljö. Jochim von Hacht
Verktyg och Utvecklingsmiljö Jochim von Hacht Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg Editorer Kompilatorer Avlusare (debugger) Versionhantering (kommer i projektkurs)
725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack
725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den
Tentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2010-04-07 Tid: 8-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna ungefär
Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16
Skolan för Datavetenskap och kommunikation Programmeringsteknik Föreläsning 16 Grafiskt användargränssnitt (GUI) Använd modulen tkinter, som har klasser för komponenter. Se "Referenser" på kursens webbsida:
Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID
Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Vad gör vi här? Programmeringsteknik fördjupningskurs (EDAA01; 7,5hp) Valfri för F, N & BME (kan läsas från åk 2 eller i sommar!) Avancerad
TDDC74 Lab 02 Listor, sammansatta strukturer
TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare
Föreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Universe Engine Rapport
1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten
Imperativ programmering
Imperativ programmering 1DL126 3p Imperativ programmering Jesper Wilhelmsson ICQ: 20328079 Yahoo: amigajoppe MSN / epost: jesperw@it.uu.se Rum: 1335 Tel: 471 1046 Imperativ programmering Vilka programmeringsspråk
Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:
Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?
Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?
Datavetenskapligt program, N1COS
Ansökan om fortsatta studier inom program, våren 2015 Datavetenskapligt program, N1COS Inför varje termin måste du söka till de kurser du vill gå. Sista datum för ansökan till höstens kurser är den 15
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt
Programmering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Introduktion till programmering D0009E. Föreläsning 1: Programmets väg
Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra
Våra enkla funktioner eller procedurer
Föreläsning 3 Våra enkla funktioner eller procedurer Programmönster 1. Repetition 2. Högre-ordningens procedurer/programmönster - Procedurer som argument - Procedurer som returnerade värden 3. Scope och
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Introduktionsmöte Innehåll
Introduktionsmöte Innehåll Introduktion till kursen Kursens mål och innehåll Undervisning Datavetenskap (LTH) Introduktionsmöte ST 2019 1 / 14 EDAA01 Programmeringsteknik - fördjupningskurs Ingen sommarkurs
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.
Nada Tentamensdag 2005 jan11 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(6p + 10p +14p+ 20p) + (9p +11p + 8p +12p) = 10p + 50p + 40 p
LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P
UMEÅ UNIVERSITET Datavetenskap 020321 Betygsgränser 0 19,5 U 20 25,5 3 26 31,5 4 32-40 5 LÖSNINGSFÖRSLAG TENTAMEN 020321 PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P Uppgift 1(3+2=5 poäng) I denna uppgift
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina
Chapter 4: Writing Classes/ Att skriva egna klasser.
Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad
Föreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Funktionell programmering. Haskell. Ge#ng started...
Funktionell programmering Haskell Ge#ng started... Installera Haskell För a/ installera Haskell på egen maskin, ladda ned Haskell Pla9orm från h/p://www.haskell.org/pla9orm/ Där finns instrukdoner, dokumentadon,
DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.
Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)
Det finns många flaggor till g++,
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-10-30 Repetition Analys av tidskomplexitet. Kostnadsmodeller. Asymptotisk komplexitet/notation. Dynamiska arrayer. Amorterad tidskomplexitet
PROGRAMMERINGSTEKNIK TIN212
Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:
Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13
Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13 Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 9 10p +(14p + 12p +10p+ 14p) + (8p +12p + 12p +8p) = 10p + 50p
ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet
ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,
Inledande programmering med C# (1DV402) Introduktion till C#
Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i
Tentamen Programmering fortsättningskurs DIT950
Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00
Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe
In- och utmatning i Unix Program i Unix skriver och läser till och från filer. En fil betyder här en vanlig fil med text eller binära data, ett tangentbord, en skärm, ett annat program etc. Innan ett program
NetBeans 5.5. Avsikt. Projektfönster
NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till
Teoretisk del. Facit Tentamen TDDC (6)
Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)
Göteborgs Universitet och Chalmers Tekniska Högskola 25 oktober 2005 Datavetenskap TDA180/TDA181/INN110 Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Onsdagen
Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.
Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod
Programmering II (ID1019)
ID1019 Johan Montelius Instruktioner Betyg Programmering II (ID1019) 2019-03-08 Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar (inte på
Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA
Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen
Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper