Title: COSC 4P41 Functional Programming
1COSC 4P41Functional Programming
- Instructor Michael Winter
- Office J323
- Office Hours Tue Wed 1000am - 1200pm
- email mwinter_at_brocku.ca
- Webpage http//www.cosc.brocku.ca/Offerings/4P4
1 - Course Description (Brock Calendar)
Introduction to
functional programming using the languages
Haskell. Topics include all data types, type
inference, pattern-matching, recursion,
polymorphism, higher-order functions, lazy vs
eager evaluation, modules and monads. - Prerequisites None
- Haskell http//www.haskell.org
- course procedures
- plagiarism
2Textbooks
- Main Text
- Haskell, The Craft of Functional Programming,
2nd edition, S. Thompson, Addison - Wesley
(1999), ISBN 0-201-34275-8 - Supplemental Texts
- The Hugs 98 User Manual, Mark P Jones, Alastair
Reid, online documentation. - Real World Haskell, Bryan O'Sullivan, John
Goerzen, Don Steward, O'Reilly (2009), ISBN
978-0-596-51498-3 - The Haskell School of Expression, P. Hudak,
Cambridge University Press (2000), ISBN
0-521-64408-9
3Course Work
- Marking Scheme
- Programming Assignments (2x10,2x20) 60
- Final Exam (oral) 40
- Programming Assignments
Number Due Late - 1 Sep 28 _at_ 100pm Sep 30 _at_ 100pm
- 2 Oct 19 _at_ 100pm Oct 21 _at_ 100pm
- 3 Nov 09 _at_ 100pm Nov 11 _at_ 100pm
- 4 Nov 30 _at_ 100pm Dec 02 _at_ 100pm
- Registration for final exam Mid of October
(Office hours or after class) - Final Exam (oral, 30min each) Monday, December
07, 2009
4- Assignments will be available online. Submission
is electronically. Details see webpage.
Assignments will be returned by email. - Assignments are due at the times specified above
and will be accepted late until the indicated
time, subject to a penalty of 25. After the late
period, assignments will not be accepted. - A mark of at least 40 on the final exam is
required to achieve a passing grade in this
course. - Assignments will be carefully examined regarding
plagiarism. Cases of suspected plagiarism will be
dealt with according to the University
regulations and Departmental procedures. - Consideration regarding illness for assignment
submission or test dates will only be considered
if accompanied with the completed Departmental
Medical Excuse form.
5Course Outline
Week Date Book/Chapt. Topics
1 Sep 14/16 1 13 Introduction to Functional Programming
2 Sep 21/23 1 45 Recursion and Data Types
3 Sep 28/30 1 67 Lists
4 Oct 05/07 1 9-10 Patterns of Computation, Functions as Values
5 Oct 14/19 1 12-13 Overloading, Type Classes, Type Checking
6 Oct 21/26 1 14-15 Algebraic Types
7 Oct 28/Nov 02 1 16 Abstract Data Types
8 Nov 04/09 1 17 Lazy Evaluation
9 Nov 11/16 1 18 Programming with Actions
10 Nov 18/23 1 8, 14.7 17.9 Reasoning about Programs
11 Nov 25/30 1 8, 14.7 17.9 Reasoning about Programs II
12 Dec 02/03 2 7 Hugs Language extensions, Review
October 12 is Thanksgiving, no classes. Make up
on December 03.
6Imperative languages
- Von Neumann model
- store with addressable locations
- machine code
- effect achieved by changing contents of store
locations - instructions executed in sequence, flow of
control altered by jumps - imperative language
- variable corresponds to store location
- instructions executed in sequence, flow of
control altered by conditional and loop
statements - efficient implementation since close to design of
conventional computers
7Functional languages
- computational model lambda calculus
- mathematical functions domain, range
- functional languages achieve effect by applying
functions - functional vs. imperative languages
- store location
- assignment statement vs. application of a
function (expressions) - side-effects
- aliasing
- referential transparency
8Features of functional languages
- usually strongly typed (modern languages)
- algebraic type definitions
- mathematical based notation
- no (implicit) pointers
- higher-order functions
- can accept functions as parameters
- can return functions as results
- recursion as a basic principle
- application of rewrite rule
- function call replaced by code body
- run-time overhead ? garbage collection
- slogan define what to do, not how to do
9What is a function?
A function is something which produces an output
value depending on the input value(s).
A type is a collection of values. Usually
functions are considered to take values of
specific types as input, and produce values of
another type.
A functional program is basically a list of
definitions of functions.
10Definitions
- Haskell definitions are of the form
- name type
- name expression
- Examples
- size Int
- size (1213)4
- square Int -gt Int
- square n nn
11- -
- FirstScript.hs
-
- Simon Thompson, June 1998
- The purpose of this script is
- - to illustrate some simple definitions
- over integers (Int)
- - to give a first example of a script.
- - -- The value size is an integer (Int), defined to
be - -- the sum of twelve and thirteen.
- size Int
- size 1213
12
- FirstLiterate.lhs
- Simon Thompson, June 1998
- The purpose of this script is
- - to illustrate some simple definitions
- over integers (Int)
- - to give a first example of a literate script.
- The value size is an integer (Int), defined to be
the sum of - twelve and thirteen.
- gt size Int
- gt size 1213
13The Booleans
- type Bool
- operations
- exOr Bool -gt Bool -gt Bool
- exOr x y (x y) not (x y)
and
or
not not
14The integers
- type Int range 21474836482147483647
- type Integer range unbounded
- operations
sum
product
raise to the power
- difference
div whole number division
mod remainder
abs absolute value
negate change sign
15Relational operators and overloading
- () for integers and Booleans. This means that
() will have the type - Int -gt Int -gt Bool
- Bool -gt Bool -gt Bool
- Indeed t -gt t -gt Bool if the type t carries an
equality. - () Eq a gt a -gt a -gt Bool
gt greater than
gt greater than or equal to
equal to
/ not equal to
lt less than or equal to
lt less than
16The rational numbers
- type Rational (import Ratio)
- operations
- and , , -, negate, abs
Integer -gt Integer -gt Rational
numerator the numerator
denominator the denominator
fromInteger Integer -gt Rational
17The characters
- type Char
- a
- \t tab
- \n newline
- \\ backslash
- \ single quote
- \ double quote
- \97 character with ASCII code 97, i.e., 9
-
18Layout
- mystery x xx
- x
- 2
- next x
- fun v1 v2 vn
- g1 e1
- g2 e2
-
- otherwise er
19Operators and Do-it-yourself operators
- () Int -gt Int -gt Int
- () 2 3 2 3
- 2 max 3 max 2 3
- Operator symbols !,,,,,,,.,/,lt,,gt,?,\,,
,,-, - () Int -gt Int -gt Int
- x y
- x gt y y
- otherwise x