Download presentation
Presentation is loading. Please wait.
Published byTrevor Rogers Modified over 9 years ago
1
© M. Winter COSC 4P41 – Functional Programming 1.11.1 COSC 4P41 Functional Programming Instructor: Michael Winter –Office J323 –Office Hours: Wed & Fri 1:00pm – 3:00pm –email: mwinter@brocku.ca Webpage: http://www.cosc.brocku.ca/~mwinter/Courses/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: three and one-half COSC credits or permission of the instructor. Haskell: http://www.haskell.org
2
© M. Winter COSC 4P41 – Functional Programming 1.21.2 Textbooks Main Text – Haskell, The Craft of Functional Programming, 3 rd edition, S. Thompson, Addison - Wesley (2011), ISBN 0-201-88295-7 Supplemental Texts – The Haskell 2010 Report, Simon Marlow, online. – 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
3
© M. Winter COSC 4P41 – Functional Programming 1.31.3 Course Work Marking Scheme –Lab Tests (3x20%)60% –Final Lab Exam 40% Tests & Exam (D205) Lab Test 1January 31 @ 3:30pm – 5:00pm Lab Test 2February 28 @ 3:30pm – 5:00pm Lab Test 3March 21 @ 3:30pm-5:00pm ExamApril 07 @ tba
4
© M. Winter COSC 4P41 – Functional Programming 1.41.4 A mark of at least 40% on the final exam is required to achieve a passing grade in this course. Consideration regarding illness for test dates will only be considered if accompanied with the completed Departmental Medical Excuse form. Academic misconduct is a serious offence. The principle of academic integrity, particularly of doing one's own work, documenting properly (including use of quotation marks, appropriate paraphrasing and referencing/citation), collaborating appropriately, and avoiding misrepresentation, is a core principle in university study. Students should consult Section VII, 'Academic Misconduct", in the "Academic Regulations and University Polices“ entry in the Undergraduate Calendar, available at brocku.ca/webcal to view a fuller description of prohibited actions, and the procedures and penalties.
5
© M. Winter COSC 4P41 – Functional Programming 1.51.5 Course Outline WeekDateBook/Chapt.Topics 1Jan 08/10[1] 1–3Introduction to Functional Programming 2Jan 15/17[1] 4–5Recursion and Data Types 3Jan 22/24[1] 6–7Lists 4Jan 29/31[1] 9-10Patterns of Computation, Functions as Values 5Feb 05/07[1] 12-13Overloading, Type Classes, Type Checking 6Feb 12/14[1] 14-15Algebraic Types 7Feb 26/28*[1] 16Abstract Data Types 8Mar 05/07[1] 17Lazy Evaluation 9Mar 12/14[1] 18Programming with Actions 10Mar 19/21[1] 8, 14.7 & 17.9Reasoning about Programs 11Mar 26/28[1] 8, 14.7 & 17.9Reasoning about Programs II 12Apr 02/04[2] 7Language extensions, Review * Feb 17-21 is Reading Week.
6
© M. Winter COSC 4P41 – Functional Programming 1.61.6 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
7
© M. Winter COSC 4P41 – Functional Programming 1.71.7 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
8
© M. Winter COSC 4P41 – Functional Programming 1.81.8 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”
9
© M. Winter COSC 4P41 – Functional Programming 1.91.9 What is a function? + 12 34 46 inputs output A functional program is basically a list of definitions of functions. + Int 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.
10
© M. Winter COSC 4P41 – Functional Programming 1. 10 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
11
© M. Winter COSC 4P41 – Functional Programming 1. 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 = 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))
12
© M. Winter COSC 4P41 – Functional Programming 1. 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. > 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))
13
© M. Winter COSC 4P41 – Functional Programming 1. 13 The Booleans type Bool operations exOr :: Bool -> Bool -> Bool exOr x y = (x || y) && not (x && y) && and || or not
14
© M. Winter COSC 4P41 – Functional Programming 1. 14 The integers type Int : range –2147483648…2147483647 type Integer : range unbounded operations + sum * product ^ raise to the power - difference div whole number division mod remainder abs absolute value negate change sign
15
© M. Winter COSC 4P41 – Functional Programming 1. 15 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 > greater than >= greater than or equal to == equal to /= not equal to <= less than or equal to < less than
16
© M. Winter COSC 4P41 – Functional Programming 1. 16 The rational numbers type Rational (import Ratio) operations and +, *, -, negate, abs %Integer -> Integer -> Rational numerator the numerator denominator the denominator fromIntegerInteger -> Rational
17
© M. Winter COSC 4P41 – Functional Programming 1. 17 The characters type Char ‘a’ ‘\t’ tab ‘\n’ newline ‘\\’ backslash ‘\’’ single quote ‘\”’ double quote ‘\97’ character with ASCII code 97, i.e., ‘9’
18
© M. Winter COSC 4P41 – Functional Programming 1. 18 Layout mystery x = x*x +x +2 next x = … fun v1 v2 … vn | g1 = e1 | g2 = e2 … | otherwise = e r
19
© M. Winter COSC 4P41 – Functional Programming 1. 19 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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.