comp 205: comparative programming languages functional programming languages: haskell lecture notes,...

21
Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: www.csc.liv.ac.uk/~grant/Teaching/COMP205/

Post on 18-Dec-2015

235 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Comp 205:Comparative Programming

Languages

Functional Programming Languages:

Haskell

Lecture notes, exercises, etc., can be found at:

www.csc.liv.ac.uk/~grant/Teaching/COMP205/

Page 2: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

An Introduction to Haskell

• The interpreter• Types• Expressions• Functions• Evaluation

Page 3: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Starting Hugs

$ which hugs/usr/bin/hugs$ hugs...Reading file ".../Prelude.hs"

Hugs session for:/usr/share/hugs/lib/Prelude.hsType :? for helpPrelude>

Page 4: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting What?

The interpreter does two things:

• Evaluate expressions

• Evaluate commands, e.g.

• :quit quit• :load <file> load a file• :r redo the last load command

Page 5: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude>

Page 6: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude> 3.1234567890123453.12346Prelude>

Page 7: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude> 3.1234567890123453.12346Prelude> 3.1234567 < 3.1234569TruePrelude>

Page 8: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude> 3.1234567890123453.12346Prelude> 3.1234567 < 3.1234569TruePrelude> 3 == sqrt 9.0000000000000001TruePrelude>

Page 9: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude> 3.1234567890123453.12346Prelude> 3.1234567 < 3.1234569TruePrelude> 3 == sqrt 9.0000000000000001TruePrelude> 3 / 1.03.0Prelude>

Page 10: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Interpreting Expressions

Prelude> 3.1234567890123453.12346Prelude> 3.1234567 < 3.1234569TruePrelude> 3 == sqrt 9.0000000000000001TruePrelude> 3 / 1.03.0Prelude> 4 / 22.0Prelude>

Page 11: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Integer Unbounded integer numbers

Int 32-bit integer numbers

Rational Unbounded rational numbers

Float, Double

Single- and double-precision floating point numbers

Bool Boolean values

Char Characters, e.g., 'a'

Types

Page 12: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Expressions

In Haskell, expressions are built from:

• constants

• operators

• function applications

• (brackets)

Page 13: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Expressions

Constants are literal denotations, e.g.:

• -3.459• True• 'a'• "hello"• [1,2,4,9]

Function application uses prefix notation:

• even 47• twice (-2)

Page 14: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

. function composition

*, /, ^ multiply, divide, power

*, - addition, subtraction

:, ++ add to list, concatenate

==,/=,<=,... equals, unequal, comparison

&& logical and

|| logical or

Operators

Page 15: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Definitions

-- approximation to mathematical pi

pie = 3.14159

Programmers can define constants and functions

Definitions must be contained in a file(e.g., arithmetic.hs)

A constant simply introduces an alias for a value:

Page 16: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Functions

-- compute circumference of a circle-- given its radius

circumference r = 2 * pie * r

-- area of a circlearea rad = pie * rad^2

Function definitions have the form:

<Name> <Var> = <Exp>

Page 17: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

The Offside Rule

circumference r = 2 * pie * r

area r = pie * r * r

bad x = area x+ circumference x -- offside!

Indentation determines where a definition ends:

Page 18: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Declaring Types

circumference :: Float -> Float

circumference r = 2 * pie * r

area :: Double -> Double

area r = pie * r ^ 2

Function definitions can include type declarations

Page 19: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Hugging Files

Prelude> :l arithmetic

Main> area 13.14159Main>

Page 20: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Pattern-Matching #1

-- factorial of a number

fact :: Integer -> Integer

fact 0 = 1fact n = fact (n-1) * n

Functions can be defined using more than one

equation:

Page 21: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205

Summary

Key topics:

• Expressions• Types• function definitions• pattern-matching

Next: More Haskell