Kursinfo Introduktion till programmering Undervisning Föreläsning 1 Kursinformation Inloggning, filsystem, kommandotolk några inledande exempel Föreläsningar Fem föreläsningar, vardera 45 minuter. Allmänna begrepp, exempel, demonstrationer. 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 Kursinfo Litteratur och examination 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 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: ; 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 Lärandemål Hård- och mjukvara Ur kursplanen Efter kursen ska ni kunna utveckla enklare små program i ett funktionellt programmeringsspråk, exempelvis. använda studentdatorer på ett sätt som efterföljande kurser kräver. Olika namn Hårdvara (hardware) = maskinvara; mjukvara (software) = programvara. Olika lager Mjukvara Användarprogram (Firefox, emacs, ghci, itunes) Begränsningar Ni kommer inte alls att förstå allt om, dess typer och uttrycksformer efter denna kurs. Kursen Introduktion till funktionell programmering i läsperiod 1 går igenom allt mycket noggrannare. Hårdvara Operativsystemet (Windows, Linux, Mac OS X) Datorn (PC, Mac, ipad, PS3) Operativsystemet Huvuddelarna i Många snarlika versioner Första versionen 1970. Känns numera under namnen Linux, Mac OS X, SunOS, BSD... Fungerar på alla sorters maskiner. Populärt bland professionella programmerare och datavetare användaren kan lätt programmera systemet. relativt bra säkerhet. "känns rätt" p.g.a. enkelhet, tydlighet, modularitet, ortogonalitet, öppenhet Kärnan (eng. kernel): närmast hårdvaran. Filsystemet: kataloger och filer. Kommandotolken (eng. shell): närmast användaren. Dessutom: drivrutiner. fönstersystem. nätverksanslutning.
Grafiskt resp textbaserat gränssnitt Kommandotolken [~/kurser/haskellintro]$ ls chalmers.pdf gu.pdf haskellintro.xlsx lectures/ old/ ovn0.pdf web/ [~/kurser/haskellintro]$ Textbaserat gränssnitt i terminalfönster Vanliga kommandon: Kommando Effekt ls Lista filer i aktuell katalog ls dir Lista filer i dir cd Flytta dig till hemmakatalogen cd dir Flytta dig till dir mkdir dir Skapa en ny katalog dir more file Skriv ut innehållet i file på terminalen cp file. Kopiera file till aktuell katalog cp file dir Kopiera file till dir GHC(i) Några grundläggande typer I ett terminalfönster $ ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ 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> :? for help Enkla typer Namn Förklaring Exempel Integer Godtyckligt stora heltal 371, 0, -4 Int Heltal av begränsad storlek (< 2 10 9 ) 371, 0, -4 Double Flyttal ( reella tal ) 3.7, 4e9, -2 Bool Sanningsvärden True, False Sammansatta typer [a] listor av element av typ a. (a,b) par bestående av ett a och ett b.
Operatorer Funktioner 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 samma typ). 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 Funktioner i I 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> Logiska operatorer &&, "och" respektive "eller". 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. Olika sätt att bygga listor 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] Listsammanfattningar (eng. list comprehensions) Ett kraftfullt sätt att bygga nya listor Givet att vi redan har en lista xs = [x 1, x 2,... x n ], så kan vi bilda nya listor på följande sätt: [ f x x <- xs ] Resultatet är listan [f (x 1 ), f (x 2 ),... f (x n )], 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.
Par och tabeller Par 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. Delbarhet och primtal Heltalsdivision 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. 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 Handledare Antal datorer 3354 Staffan 14 3358 Arash 14 3507 Chistopher och Oscar 20 5355 Anton 18 6225 Alexander och Bartolomeus 20