1 / 19

COSC 4P41 Functional Programming

COSC 4P41 Functional 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

Télécharger la présentation

COSC 4P41 Functional Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  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.

  5. Course Outline *October 12 is Thanksgiving, no classes. Make up on December 03.

  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. 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. 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. 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.

  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. {-######################################################### 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. ########################################################### 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. The Booleans • type Bool • operations exOr :: Bool -> Bool -> Bool exOr x y = (x || y) && not (x && y)

  14. The integers • type Int: range –2147483648…2147483647 • type Integer: range unbounded • operations

  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

  16. The rational numbers • type Rational (import Ratio) • operations and +, *, -, negate, abs

  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. Layout mystery x = x*x +x +2 next x = … fun v1 v2 … vn | g1 = e1 | g2 = e2 … | otherwise = er

  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

More Related