Introduction to Programming in Haskell - PowerPoint PPT Presentation

1 / 94
About This Presentation
Title:

Introduction to Programming in Haskell

Description:

Read the text book each week. Make sure you can solve the problems ... Type error messages will be easier to understand. Sometimes they are necessary (as for price) ... – PowerPoint PPT presentation

Number of Views:122
Avg rating:3.0/5.0
Slides: 95
Provided by: johnh58
Category:

less

Transcript and Presenter's Notes

Title: Introduction to Programming in Haskell


1
Introduction to Programming in Haskell
  • Koen Lindström Claessen

2
Programming
  • Exciting subject at the heart of computing
  • Never programmed?
  • Learn to make the computer obey you!
  • Programmed before?
  • Lucky you! Your knowledge will help a lot...
  • ...as you learn a completely new way to program
  • Everyone will learn a great deal from this course!

3
Goal of the Course
  • Start from the basics, after Datorintroduktion
  • Learn to write small-to-medium sized programs in
    Haskell
  • Introduce basic concepts of computer science

4
The Flow
Do not break the flow!
You prepare in advance
I explain in lecture
Tuesdays,Fridays
You learn with exercises
You put to practice with lab assignments
Mondays/Tuesdays
Submit end of each week
5
Exercise Sessions
  • Mondays or Tuesdays
  • Depending on what group you are in
  • Come prepared
  • Work on exercises together
  • Discuss and get help from tutor
  • Personal help
  • Make sure you understand this weeks things
    before you leave

6
Lab Assignments
  • Work in pairs
  • (Almost) no exceptions!
  • Lab supervision
  • Book a time in advance
  • One time at a time!
  • Start working on lab when you have understood the
    matter
  • Submit end of each week
  • Feedback
  • Return The tutor has something to tell you fix
    and submit again
  • OK You are done

even this week!
7
Getting Help
  • Weekly group sessions
  • personal help to understand material
  • Lab supervision
  • specific questions about programming assignment
    at hand
  • Discussion forum
  • general questions, worries, discussions

8
Assessment
  • Written exam (3 credits)
  • Consists of small programming problems to solve
    on paper
  • You need Haskell in your fingers
  • Course work (2 credits)
  • Complete all labs successfully

9
A Risk
  • 7 weeks is a short time to learn programming
  • So the course is fast paced
  • Each week we learn a lot
  • Catching up again is hard
  • So do keep up!
  • Read the text book each week
  • Make sure you can solve the problems
  • Go to the weekly exercise sessions
  • From the beginning

10
Course Homepage
  • The course homepage will have ALL up-to-date
    information relevant for the course
  • Schedule
  • Lab assignments
  • Exercises
  • Last-minute changes
  • (etc.)

Or Google for chalmers introduction functional
programming
http//www.cs.chalmers.se/Cs/Grundutb/Kurser/funht
/
11
Software
Software Programs Data
12
Data
  • Data is any kind of storable information.
    Examples
  • Numbers
  • Letters
  • Email messages
  • Songs on a CD
  • Maps
  • Video clips
  • Mouse clicks
  • Programs

13
Programs
Programs compute new data from old
data. Example Baldurs Gate computes a sequence
of screen images and sounds from a sequence of
mouse clicks.
14
Building Software Systems
A large system may contain many millions of lines
of code. Software systems are among the most
complex artefacts ever made. Systems are built
by combining existing components as far as
possible.
Bonnier buys Quicktime Video from Apple.
Volvo buys engines from Mitsubishi.
15
Programming Languages
Programs are written in programming
languages. There are hundreds of different
programming languages, each with their strengths
and weaknesses. A large system will often
contain components in many different languages.
16
Programming Languages
which language should we teach?
Scheme
C
Lisp
BASIC
C
Haskell
Java
C
ML
Python
JavaScript
csh
Curry
Perl
OCaML
bash
Erlang
Ruby
Prolog
Lustre
Mercury
PostScript
VHDL
Esterel
PDF
SQL
Verilog
17
Programming Language Features
dynamically typed
pure functions
higher-order functions
statically typed
type inference
real-time
immutable datastructures
polymorphism
overloading
concurrency
high performance
distribution
parameterized types
lazy
virtual machine
Java
reflection
type classes
object oriented
compiler
interpreter
meta-programming
Haskell
unification
C
backtracking
18
Teaching Programming
  • Give you a broad basis
  • Easy to learn more programming languages
  • Easy to adapt to new programming languages
  • Haskell is defining state-of-the-art in
    programming language development
  • Appreciate differences between languages
  • Become a better programmer!

19
Industrial Uses of Functional Languages
Intel (microprocessor verification) Hewlett
Packard (telecom event correlation) Ericsson
(telecommunications) Carlstedt Research
Technology (air-crew scheduling)
Hafnium (Y2K tool) Shop.com (e-commerce) Motorola
(test generation) Thompson (radar
tracking) Microsoft (SDV) Jasper (hardware
verification)
20
Why Haskell?
  • Haskell is a very high-level language (many
    details taken care of automatically).
  • Haskell is expressive and concise (can achieve a
    lot with a little effort).
  • Haskell is good at handling complex data and
    combining components.
  • Haskell is not a high-performance language
    (prioritise programmer-time over computer-time).

21
A Haskell Demo
  • Start the GHCi Haskell interpreter
  • ghci
  • ___ ___ _
  • / _ \ /\ /\/ __(_)
  • / /_\// /_/ / / GHC Interactive,
    version 6.6.1, for Haskell 98.
  • / /_\\/ __ / /___ http//www.haskell.org/
    ghc/
  • \____/\/ /_/\____/_ Type ? for help.
  • Loading package base ... linking ... done.
  • Prelude

The prompt. GHCi is ready for input.
22
GHCi as a Calculator
Type in expressions, and ghci calculates and
prints their value.
Prelude 22 4 Prelude 2-2 0 Prelude
23 6 Prelude 2/3 0.666666666666667
Multiplication and division look a bit unfamiliar
we cannot omit multiplication, or type
horizontal lines.
X
2
3
23
Binding and Brackets
Prelude 223 8 Prelude (22)3 12 Prelude
(12)/(34) 0.428571428571429
Multiplication and division bind more tightly
than addition and subtraction so this means
26, not 43.
We use brackets to change the binding (just as in
mathematics), so this is 43.
This is how we write 12 34
24
Quiz
  • What is the value of this expression?
  • Prelude 12/34

25
Quiz
  • What is the value of this expression?
  • Prelude 12/34
  • 5.66666666666667

26
Example Currency Conversion
  • Suppose we want to buy a game costing 53 from a
    foreign web site.

Prelude 539.16642 485.82026
Exchange rate 1 9.16642 SEK
Price in SEK
Boring to type 9.16642 every time we convert a
price!
27
Naming a Value
  • We give a name to a value by making a definition.
  • Definitions are put in a file, using a text
    editor such as emacs.
  • emacs Examples.hs

Do this in a separate window, so you can edit and
run hugs simultaneously.
Haskell files end in .hs
The UNIX prompt, not the ghci one!
28
Creating the Definition
Give the name euroRate to the value 9.16642
variable
29
Using the Definition
Load the file Examples.hs into ghci make the
definition available.
The prompt changes we have now loaded a program.
Prelude l Examples Main euroRate 9.16642 Main
53euroRate 485.82026 Main
We are free to make use of the definition.
30
Functional Programming is based on Functions
  • A function is a way of computing a result from
    its arguments
  • A functional program computes its output as a
    function of its input
  • E.g. Series of screen images from a series of
    mouse clicks
  • E.g. Price in SEK from price in euros

31
A Function to convert Euros to SEK
A definition placed in the file Examples.hs
A comment to help us understand the program
-- convert euros to SEK sek x xeuroRate
Function name the name we are defining.
Expression to compute the result
Name for the argument
32
Using the Function
Reload the file to make the new definition
available.
Main r Main sek 53 485.82026
Call the function Notation no brackets! C.f. sin
0.5, log 2, not f(x).
sek x xeuroRate
x 53 While we evaluate the right hand side
53euroRate
33
Binding and Brackets again
Different! This is (sek 50) 3. Functions bind
most tightly of all.
Main sek 53 485.82026 Main sek 50
3 461.321 Main sek (503) 485.82026 Main
Use brackets to recover sek 53.
No stranger than writing sin ? and sin (? ?)
34
Converting Back Again
-- convert SEK to euros euro x x/euroRate
Main r Main euro 485.82026 53.0 Main euro
(sek 49) 49.0 Main sek (euro 217) 217.0
Testing the program trying it out to see if does
the right thing.
35
Automating Testing
  • Why compare the result myself, when I have a
    computer?

The operator tests whether two values are equal
Main 2 2 True Main 2 3 False Main euro
(sek 49) 49 True
Yes they are
No they arent
Note two equal signs are an operator. One equal
sign makes a definition.
Let the computer check the result.
36
Defining the Property
  • Define a function to perform the test for us

prop_EuroSek x euro (sek x) x
Main prop_EuroSek 53 True Main prop_EuroSek
49 True
Performs the same tests as before but now we
need only remember the function name!
37
Writing Properties in Files
  • Functions with names beginning prop_ are
    properties they should always return True
  • Writing properties in files
  • Tells us how functions should behave
  • Tells us what has been tested
  • Lets us repeat tests after changing a definition
  • Properties help us get programs right!

38
Automatic Testing
  • Testing account for more than half the cost of a
    software project
  • We will use a tool for automatic testing

import Test.QuickCheck
Capital letters must appear exactly as they do
here.
Add first in the file of definitions makes
QuickCheck available.
39
Running Tests
Runs 100 randomly chosen tests
Main quickCheck prop_EuroSek Falsifiable, after
10 tests 3.75 Main sek 3.75 34.374075 Main
euro 34.374075 3.75
Its not true!
The value for which the test fails.
Looks OK
40
The Problem
  • There is a very tiny difference between the
    initial and final values
  • Calculations are only performed to about 15
    significant figures
  • The property is wrong!

Main euro (sek 3.75) - 3.75 4.44089209850063e-016
e means 10
-16
41
Fixing the Problem
  • The result should be nearly the same
  • The difference should be small say

Main 2 3
We can use than another
42
Defining Nearly Equal
  • We can define new operators with names made up of
    symbols

x y x-y
With arguments x and y
Which returns True if the difference between x
and y is less than 0.000001
Define a new operator
43
Testing
Main 3 3.0000001 True Main 34 True
OK
Whats wrong?
x y x-y 44
Fixing the Definition
  • A useful function

Main abs 3 3 Main abs (-3) 3
Absolute value
x y abs (x-y)
Main 3 4 False
45
Fixing the Property
prop_EuroSek x euro (sek x) x
Main prop_EuroSek 3 True Main prop_EuroSek
56 True Main prop_EuroSek 2 True
46
Name the Price
  • Lets define a name for the price of the game we
    want

price 53
Main sek price ERROR - Type error in
application Expression sek price
Term price Type
Integer Does not match Double
47
Every Value has a Type
  • The i command prints information about a name

Integer (whole number) is the type of price
Main i price price Integer Main i
euroRate euroRate Double
Double is the type of real numbers Funny name,
but refers to double the precision that computers
originally used
48
More Types
The type of truth values, named after the
logician Boole
Main i True True Bool -- data
constructor Main i False False Bool --
data constructor Main i sek sek Double -
Double Main i prop_EuroSek prop_EuroSek
Double - Bool
The type of a function
Type of the result
Type of the result
Type of the argument
49
Types Matter
  • Types determine how computations are performed

Specify which type to use
Main 123456789123456789 Double 1.524157875019
05e016 Main 123456789123456789
Integer 15241578750190521
Correct to 15 figures
The exact result 17 figures (but must be an
integer)
Hugs must know the type of each expression before
computing it.
50
Type Checking
  • Infers (works out) the type of every expression
  • Checks that all types match before running the
    program

51
Our Example
Main i price price Integer Main i sek sek
Double - Double Main sek price ERROR - Type
error in application Expression sek
price Term price Type
Integer Does not match Double
52
Why did it work before?
Certainly works to say 53 What is the type of 53?
Main sek 53 485.82026 Main 53
Integer 53 Main 53 Double 53.0 Main price
Integer 53 Main price Double ERROR - Type
error in type annotation Term
price Type Integer Does not
match Double
53 can be used with several types it is
overloaded
Giving it a name fixes the type
53
Fixing the Problem
  • Definitions can be given a type signature which
    specifies their type

price Double price 53
Main i price price Double Main sek
price 485.82026
54
Always Specify Type Signatures!
  • They help the reader (and you) understand the
    program
  • The type checker can find your errors more
    easily, by checking that definitions have the
    types you say
  • Type error messages will be easier to understand
  • Sometimes they are necessary (as for price)

55
Example with Type Signatures
euroRate Double euroRate 9.16642 sek, euro
Double - Double sek x xeuroRate euro x
x/euroRate prop_EuroSek Double -
Bool prop_EuroSek x euro (sek x) x
56
What is the type of 53?
i only works for names
Main i 53 Unknown reference 53' Main t sek
53 sek 53 Double Main t 53 53 Num a
a Main i infixl 7 () Num a a - a
- a -- class member
But t gives the type (only) of any expression
Then 53 can have type a
If a is a numeric type
If a is a numeric type
Then can have type a-a-a
57
What is Num exactly?
Main i Num -- type class ... class (Eq a,
Show a) Num a where () a - a - a (-)
a - a - a () a - a - a ... --
instances instance Num Int instance Num
Integer instance Num Float instance Num
Double instance Integral a Num (Ratio a)
A class of types
With these operations
Types which belong to this class
58
Examples
Main 2 3.5 5.5 Main True 3 ERROR - Cannot
infer instance Instance Num Bool
Expression True 3
2, , and 3.5 can all work on Double
Sure enough, Bool is not in the Num class
59
A Tricky One!
Main sek (-10) -91.6642 Main sek -10 ERROR -
Cannot infer instance Instance Num
(Double - Double) Expression sek - 10
Whats going on?
60
Operators Again
Main i infixl 6 () Num a a - a - a
-- class member Main i infixl 7 ()
Num a a - a - a -- class member
The binding power (or precedence) of an
operator binds tighter than because 7 is
greater than 6
61
Giving a Precedence
Main 1/2000000 0 ERROR - Cannot infer
instance Instance Fractional Bool
Expression 1 / 2000000 0
Wrongly interpreted as 1 / (2000000
0) Instead of (1/2000000) 0
62
Giving a Precedence
  • should bind the same way as

Main i infix 4 () Eq a a - a -
Bool -- class member
infix 4 x y abs (x-y)
Main 1/2000000 0 True
63
Summary
  • Think about the properties of your program
  • ... and write them down
  • It helps you understanding
  • the problem you are solving
  • the program you are writing
  • It helps others understanding what you did
  • co-workers
  • customers
  • you in 1 year from now

64
Cases and Recursion
65
Example The squaring function
  • Example a function to compute

-- sq x returns the square of x sq Integer -
Integer sq x x x
66
Evaluating Functions
  • To evaluate sq 5
  • Use the definitionsubstitute 5 for x throughout
  • sq 5 5 5
  • Continue evaluating expressions
  • sq 5 25
  • Just like working out mathematics on paper

sq x x x
67
Example Absolute Value
  • Find the absolute value of a number

-- absolute x returns the absolute value of
x absolute Integer - Integer absolute x
undefined
68
Example Absolute Value
  • Find the absolute value of a number
  • Two cases!
  • If x is positive, result is x
  • If x is negative, result is -x

Programs must often choose between alternatives
-- absolute x returns the absolute value of
x absolute Integer - Integer absolute x x
0 undefined absolute x x
Think of the cases! These are guards
69
Example Absolute Value
  • Find the absolute value of a number
  • Two cases!
  • If x is positive, result is x
  • If x is negative, result is -x

-- absolute x returns the absolute value of
x absolute Integer - Integer absolute x x
0 x absolute x x
Fill in the result in each case
70
Example Absolute Value
  • Find the absolute value of a number
  • Correct the code

-- absolute x returns the absolute value of
x absolute Integer - Integer absolute x x
0 x absolute x x
is greater than or equal,
71
Evaluating Guards
  • Evaluate absolute (-5)
  • We have two equations to use!
  • Substitute
  • absolute (-5) -5 0 -5
  • absolute (-5) -5

absolute x x 0 x absolute x x
72
Evaluating Guards
  • Evaluate absolute (-5)
  • We have two equations to use!
  • Evaluate the guards
  • absolute (-5) False -5
  • absolute (-5) True -(-5)

Discard this equation
Keep this one
absolute x x 0 x absolute x x
73
Evaluating Guards
  • Evaluate absolute (-5)
  • We have two equations to use!
  • Erase the True guard
  • absolute (-5) -(-5)

absolute x x 0 x absolute x x
74
Evaluating Guards
  • Evaluate absolute (-5)
  • We have two equations to use!
  • Compute the result
  • absolute (-5) 5

absolute x x 0 x absolute x x
75
Notation
  • We can abbreviate repeated left hand sides
  • Haskell also has if then else

absolute x x 0 x absolute x x
absolute x x 0 x x
absolute x if x 0 then x else -x
76
Example Computing Powers
  • Compute (without using built-in xn)

77
Example Computing Powers
  • Compute (without using built-in xn)
  • Name the function

power
78
Example Computing Powers
  • Compute (without using built-in xn)
  • Name the inputs

power x n undefined
79
Example Computing Powers
  • Compute (without using built-in xn)
  • Write a comment

-- power x n returns x to the power n power x n
undefined
80
Example Computing Powers
  • Compute (without using built-in xn)
  • Write a type signature

-- power x n returns x to the power n power
Integer - Integer - Integer power x n
undefined
81
How to Compute power?
  • We cannot write
  • power x n x x

n times
82
A Table of Powers
  • Each row is x the previous one
  • Define power x n to compute the nth row

n
power x n
0
1
1
x
2
xx
3
xxx
83
A Definition?
power x n x power x (n-1)
  • Testing
  • Main power 2 2
  • ERROR - stack overflow

Why?
84
A Definition?
  • Testing
  • Main power 2 2
  • Program error pattern match failure power 2 0

power x n n 0 x power x (n-1)
85
A Definition?
First row of the table
  • Testing
  • Main power 2 2
  • 4

power x 0 1 power x n n 0 x power x
(n-1)
The BASE CASE
86
Recursion
  • First example of a recursive function
  • Defined in terms of itself!
  • Why does it work? Calculate
  • power 2 2 2 power 2 1
  • power 2 1 2 power 2 0
  • power 2 0 1

power x 0 1 power x n n 0 x power x
(n-1)
87
Recursion
  • First example of a recursive function
  • Defined in terms of itself!
  • Why does it work? Calculate
  • power 2 2 2 power 2 1
  • power 2 1 2 1
  • power 2 0 1

power x 0 1 power x n n 0 x power x
(n-1)
88
Recursion
  • First example of a recursive function
  • Defined in terms of itself!
  • Why does it work? Calculate
  • power 2 2 2 2
  • power 2 1 2 1
  • power 2 0 1

power x 0 1 power x n n 0 x power x
(n-1)
No circularity!
89
Recursion
  • First example of a recursive function
  • Defined in terms of itself!
  • Why does it work? Calculate
  • power 2 2 2 power 2 1
  • power 2 1 2 power 2 0
  • power 2 0 1

power x 0 1 power x n n 0 x power x
(n-1)
The STACK
90
Recursion
  • Reduce a problem (e.g. power x n) to a smaller
    problem of the same kind
  • So that we eventually reach a smallest base
    case
  • Solve base case separately
  • Build up solutions from smaller solutions

Powerful problem solving strategy in any
programming language!
91
Counting the regions
  • n lines. How many regions?

remove one line ...
problem is easier!
when do we stop?
92
The Solution
  • Always pick the base case as simple as possible!

regions Integer - Integer regions 0
1 regions n n 0 regions (n-1) n
93
Course Text Book
uses Hugs instead of GHCi
The Craft of Functional Programming (second
edition), by Simon Thompson. Available at
Cremona. An excellent book which goes well beyond
this course, so will be useful long after the
course is over. Read Chapter 1 to 4 before the
laboratory sessions on Wednesday, Thursday and
Friday.
94
Course Web Pages
Updated almost daily!
URL http//www.cs.chalmers.se/Cs/Grundutb/Kurser
/funht/
  • These slides
  • Schedule
  • Practical information
  • Assignments
  • Discussion board
Write a Comment
User Comments (0)
About PowerShow.com