Introduktion till programmering Undervisning Lärare Litteratur och

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.