Kursinfo Introduktion till programmering Undervisning Föreläsningar Föreläsning 1 Fem föreläsningar, vardera 45 minuter. Allmänna begrepp, exempel, demonstrationer. Kursinformation Inloggning, filsystem, kommandotolk Haskell – några inledande exempel Labbhandledning Fem tretimmarspass, direkt efter varje föreläsning Bokade arbetsplatser och handledare på plats. Examination genom att visa lösta uppgifter för handledaren. Kursinfo Lärare Föreläsningar Emil Axelsson (kursansvarig) John Hughes Labbhandledning Staffan Björnesjö Alexander Sjösten Arash Rouhani Bartolomeus Jankowski Christopher Svanefalk Oscar Utbult Anton Ekblad Kursinfo Litteratur och examination Kurslitteratur Denna och nästa kurs är avsedda att klaras enbart med material från kursernas webbplatser. För den som ändå önskar en bok finns: Simon Thompson: Haskell; The Craft of Functional Programming, 2nd ed. Examination Till varje övningspass finns en sida med några obligatoriska uppgifter. Dessa löses och visas för handledaren innan övningspassets slut. Ni arbetar med uppgifterna två och två; arbetsplatserna räcker inte till att arbeta individuellt. Kursinfo Unix Lärandemål Hård- och mjukvara Ur kursplanen Olika namn Efter kursen ska ni kunna Hårdvara (hardware) = maskinvara; mjukvara (software) = programvara. utveckla enklare små program i ett funktionellt programmeringsspråk, exempelvis Haskell. använda studentdatorer på ett sätt som efterföljande kurser kräver. Olika lager Mjukvara Begränsningar Ni kommer inte alls att förstå allt om Haskell, dess typer och uttrycksformer efter denna kurs. Kursen Introduktion till funktionell programmering i läsperiod 1 går igenom allt mycket noggrannare. Unix Användarprogram (Firefox, emacs, ghci, iTunes) Operativsystemet (Windows, Linux, Mac OS X) Hårdvara Datorn (PC, Mac, iPad, PS3) Unix Operativsystemet Unix Huvuddelarna i Unix Många snarlika versioner Första versionen 1970. Kärnan (eng. kernel): närmast hårdvaran. Känns numera under namnen Linux, Mac OS X, SunOS, BSD... Filsystemet: kataloger och filer. Fungerar på alla sorters maskiner. Populärt bland professionella programmerare och datavetare Kommandotolken (eng. shell): närmast användaren. Dessutom: användaren kan lätt programmera systemet. relativt bra säkerhet. "känns rätt" p.g.a. enkelhet, tydlighet, modularitet, ortogonalitet, öppenhet drivrutiner. fönstersystem. nätverksanslutning. Unix Unix Grafiskt resp textbaserat gränssnitt Kommandotolken Textbaserat gränssnitt i terminalfönster [~/kurser/haskellintro]$ ls chalmers.pdf gu.pdf haskellintro.xlsx lectures/ old/ ovn0.pdf web/ [~/kurser/haskellintro]$ Haskell GHC(i) Vanliga kommandon: Kommando ls ls dir cd cd dir mkdir dir more file cp file . cp file dir Effekt Lista filer i aktuell katalog Lista filer i dir Flytta dig till hemmakatalogen Flytta dig till dir Skapa en ny katalog dir Skriv ut innehållet i file på terminalen Kopiera file till aktuell katalog Kopiera file till dir Haskell Några grundläggande typer I ett terminalfönster $ ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Prelude> 3 + 5 * 7 38 Prelude> exp 1 2.718281828459045 Prelude> pi < sqrt 2 False Prelude> sin pi == 0 False Prelude> Enkla typer Namn Integer Int Double Bool Förklaring Godtyckligt stora heltal Heltal av begränsad storlek (< 2 · 109 ) Flyttal (“reella tal”) Sanningsvärden Sammansatta typer [a] (a,b) listor av element av typ a. par bestående av ett a och ett b. Exempel 371, 0, -4 371, 0, -4 3.7, 4e9, -2 True, False Haskell Haskell Operatorer Aritmetik +, -, * För både heltal och flyttal (men bägge operanderna av samma typ). / Bara för flyttal. Exponentiering ("upphöjt till"). Jämförelser ==,/=,<,<=,>,>= För både heltal och flyttal (men bägge operanderna av Funktioner Funktioner i matematik En funktion f kan definieras genom t ex f (x ) = (2x + 3)/(x + 2) Vi kan sedan använda f på följande sätt: f (8) = (2 · 8 + 3)/(8 + 2) = 1.9 samma typ). Logiska operatorer &&, || "och" respektive "eller". Haskell Olika sätt att bygga listor Funktioner i Haskell I Haskell skulle vi skriva f x = (2*x+3)/(x+2) i en fil MyProgram.hs och sedan ladda in filen i ghci: Prelude> :load MyProgram.hs Main> f 8 1.9 Main> Observera I ghci kan vi skriva uttryck, vars värde beräknas och skrivs ut. Definitioner skrivs i en fil, som sedan laddas in i ghci. Haskell Listsammanfattningar (eng. list comprehensions) Interaktion med ghci Prelude> [1,7,4,6] [1,7,4,6] Prelude> [1..10] [1,2,3,4,5,6,7,8,9,10] Prelude> [5..] [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, 24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,Interrupted Prelude> [1,4..30] [1,4,7,10,13,16,19,22,25,28] Prelude> [x * x | x <- [1..10]] [1,4,9,16,25,36,49,64,81,100] Prelude> [x | x <- [1..99], mod x 10==7 || div x 10==7] [7,17,27,37,47,57,67,70,71,72,73,74,75,76,77,78,79,87,97] Ett kraftfullt sätt att bygga nya listor Givet att vi redan har en lista xs = [x1 , x2 , . . . xn ], så kan vi bilda nya listor på följande sätt: [ f x | x <- xs ] Resultatet är listan [f (x1 ), f (x2 ), . . . f (xn )], som också har n element. [ x | x <- xs, p x ] Resultatet är listan av de element x i listan xs, för vilka villkoret p x blir True. Denna lista har högst n element. [ f x | x <- xs, p x ] En kombination av ovanstående: välj först ut de element i xs som uppfyller villkoret p, använd sedan funktionen f på dessa för att bilda den nya listan. Haskell Haskell Par och tabeller Delbarhet och primtal Par Heltalsdivision Vi kan bilda värden som består av ett par av två (enklare) värden: Prelude> (2^3,3*5) (8,15) Prelude> Tabeller En lista av par kan vi se som en tabell. Exempel: En tabell över kvadratrötter av talen mellan 1 och 100 [( n, sqrt n) | n <- [1..100]] När vi talar om tabeller tänker vi oss dem kanske som prydligt formatterade i två (eller flera) kolumner. Vi får återkomma till detta. Haskell Nu: övning! Ni ska nu gå till labbsalen för att själva öva det vi talat om. Det enda sättet att lära sig programmering är genom övning! Labbsal 3354 3358 3507 5355 6225 Handledare Staffan Arash Chistopher och Oscar Anton Alexander och Bartolomeus Antal datorer 14 14 20 18 20 För heltalsdivision mellan två heltal fås kvoten med div och resten med mod: Prelude> div 13 5 2 Prelude> mod 13 5 3 Delbarhet Vi säger att m är delbart med n om mod m n == 0. Faktorerna i m är de tal som m är delbart med. Primtal Ett primtal är ett heltal > 1, som bara har 1 och sig själv som faktorer.