Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes,...
-
date post
18-Dec-2015 -
Category
Documents
-
view
220 -
download
2
Transcript of Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes,...
![Page 1: Comp 205: Comparative Programming Languages Functional Programming Languages: Haskell Lecture notes, exercises, etc., can be found at: grant/Teaching/COMP205](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/1.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/14.jpg)
. 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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/18.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.us/reader030/viewer/2022032800/56649d265503460f949fcf1d/html5/thumbnails/21.jpg)
Summary
Key topics:
• Expressions• Types• function definitions• pattern-matching
Next: More Haskell