COSC 4P41 Functional Programming
COSC 4P41, taught by Michael Winter, is an introduction to functional programming using Haskell. Covering key concepts such as data types, type inference, recursion, higher-order functions, and lazy evaluation, this course helps students understand the principles of functional programming. There are no prerequisites, and it includes programming assignments and an oral final exam. Detailed resources include the textbook "Haskell: The Craft of Functional Programming" and online documentation. Students are encouraged to submit assignments electronically and adhere to submission deadlines.
COSC 4P41 Functional Programming
E N D
Presentation Transcript
COSC 4P41Functional Programming • Instructor: Michael Winter • Office J323 • Office Hours: Tue & Wed 10:00am - 12:00pm • email: mwinter@brocku.ca • Webpage: http://www.cosc.brocku.ca/Offerings/4P41 • 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
Textbooks • 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
Course Work • Marking Scheme • Programming Assignments (2x10%,2x20%) 60% • Final Exam (oral) 40% • Programming Assignments Number Due Late 1 Sep 28 @ 1:00pm Sep 30 @ 1:00pm 2 Oct 19 @ 1:00pm Oct 21 @ 1:00pm 3 Nov 09 @ 1:00pm Nov 11 @ 1:00pm 4 Nov 30 @ 1:00pm Dec 02 @ 1:00pm • Registration for final exam: Mid of October (Office hours or after class) • Final Exam (oral, 30min each): Monday, December 07, 2009
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.
Course Outline *October 12 is Thanksgiving, no classes. Make up on December 03.
Imperative 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
Functional 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
Features 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”
inputs 12 output + 46 34 Int Int + Int What 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.
Definitions Haskell definitions are of the form: name :: type name = expression Examples: size :: Int size = (12+13)*4 square :: Int -> Int square n = n*n
{-######################################################### 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 = 12+13 -- The function to square an integer. square :: Int -> Int square n = n*n -- The function to double an integer. double :: Int -> Int double n = 2*n -- An example using double, square and size. example :: Int example = double (size - square (2+2))
########################################################### 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. > size :: Int > size = 12+13 The function to square an integer. > square :: Int -> Int > square n = n*n The function to double an integer. > double :: Int -> Int > double n = 2*n An example using double, square and size. > example :: Int > example = double (size - square (2+2))
The Booleans • type Bool • operations exOr :: Bool -> Bool -> Bool exOr x y = (x || y) && not (x && y)
The integers • type Int: range –2147483648…2147483647 • type Integer: range unbounded • operations
Relational operators and overloading (==) for integers and Booleans. This means that (==) will have the type Int -> Int -> Bool Bool -> Bool -> Bool Indeed t -> t -> Bool if the type t carries an equality. (==) :: Eq a => a -> a -> Bool
The rational numbers • type Rational (import Ratio) • operations and +, *, -, negate, abs
The characters • type Char ‘a’ ‘\t’ tab ‘\n’ newline ‘\\’ backslash ‘\’’ single quote ‘\”’ double quote ‘\97’ character with ASCII code 97, i.e., ‘9’
Layout mystery x = x*x +x +2 next x = … fun v1 v2 … vn | g1 = e1 | g2 = e2 … | otherwise = er
Operators and Do-it-yourself operators (+) :: Int -> Int -> Int (+) 2 3 = 2 + 3 2 `max` 3 = max 2 3 Operator symbols !,#,$,%,&,*,+,.,/,<,=,>,?,\,^,|,:,-,~ (&&&) :: Int -> Int -> Int x &&& y | x > y = y | otherwise = x