Haskell Chapter 4.

Slides:



Advertisements
Similar presentations
Formal Models of Computation Part II The Logic Model
Advertisements

Haskell Lets review some of the Haskell concepts you have been learning on your own. The answers are included, but try it yourself first.
Comp 205: Comparative Programming Languages Functional Programming Languages: More Haskell Nested definitions Lists Lecture notes, exercises, etc., can.
Exercises – don’t use built in functions for these as we want the practice Write a recursive function to add up all the numbers in a list "flatten" a list.
0 PROGRAMMING IN HASKELL Chapter 4 - Defining Functions.
0 PROGRAMMING IN HASKELL Chapter 6 - Recursive Functions Most of this should be review for you.
0 PROGRAMMING IN HASKELL Chapter 6 - Recursive Functions.
Advanced Programming Andrew Black and Tim Sheard Lecture 4 Intro to Haskell.
Comp 205: Comparative Programming Languages Functional Programming Languages: More Lists Recursive definitions List comprehensions Lecture notes, exercises,
Haskell Chapter 3, Part I. Pattern Matching  Pattern matching with tuples  Pattern matching with list comprehensions  As-patterns.
0 PROGRAMMING IN HASKELL Typeclasses and higher order functions Based on lecture notes by Graham Hutton The book “Learn You a Haskell for Great Good” (and.
Operators, Functions and Modules1 Pattern Matching & Recursion.
0 PROGRAMMING IN HASKELL Chapter 7 - Defining Functions, List Comprehensions.
1-Nov-15 Haskell II Functions and patterns. Data Types Int + - * / ^ even odd Float + - * / ^ sin cos pi truncate Char ord chr isSpace isUpper … Bool.
Recursion on Lists Lecture 5, Programmeringsteknik del A.
0 PROGRAMMING IN HASKELL Chapter 4 - Defining Functions.
Lee CSCE 314 TAMU 1 CSCE 314 Programming Languages Haskell: More on Functions and List Comprehensions Dr. Hyunyoung Lee.
0 PROGRAMMING IN HASKELL Based on lecture notes by Graham Hutton The book “Learn You a Haskell for Great Good” (and a few other sources) Odds and Ends,
Haskell Chapter 4. Recursion  Like other languages  Base case  Recursive call  Author programs a number of built-in functions as examples.
Functional Programming Lecture 3 - Lists Muffy Calder.
Haskell Chapter 5, Part II. Topics  Review/More Higher Order Functions  Lambda functions  Folds.
List Operations CSCE 314 Spring CSCE 314 – Programming Studio Tuple and List Patterns Pattern matching with wildcards for tuples fst (a, _) = a.
CSE 3302 Programming Languages Chengkai Li Spring 2008 Functional Programming Language: Haskell (cont’d) Lecture 20 – Functional Programming, Spring 2008.
0 PROGRAMMING IN HASKELL Typeclasses and higher order functions Based on lecture notes by Graham Hutton The book “Learn You a Haskell for Great Good” (and.
6-Jul-16 Haskell II Functions and patterns. Data Types Int + - * / ^ even odd Float + - * / ^ sin cos pi truncate Char ord chr isSpace isUpper … Bool.
© M. Winter COSC 4P41 – Functional Programming Some functions id :: a -> a id x = x const :: a -> b -> a const k _ = k ($) :: (a -> b) -> a -> b.
Lecture 14: Advanced Topic: Functional Programming
Polymorphic Functions
Functional Programming
Haskell: Syntax in Functions
Conditional Expressions
Recursion.
CS 550 Programming Languages Jeremy Johnson
dr Robert Kowalczyk WMiI UŁ
ML: a quasi-functional language with strong typing
Theory of Computation Lecture 4: Programs and Computable Functions II
Functional Programming Lecture 12 - more higher order functions
Functions and patterns
ML Again ( Chapter 7) Patterns Local variable definitions
A lightening tour in 45 minutes
Koen Lindström Claessen
PROGRAMMING IN HASKELL
Functional Programming
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
CMSC 330: Organization of Programming Languages
Haskell Strings and Tuples
Computer Science 312 Haskell Lists 1.
PROGRAMMING IN HASKELL
Higher Order Functions
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
CSCE 314: Programming Languages Dr. Dylan Shell
Haskell Types, Classes, and Functions, Currying, and Polymorphism
Higher Order Functions
PROGRAMMING IN HASKELL
CS 457/557: Functional Languages Folds
RECURSION Haskell.
Lazy Programming Lazy evaluation:
HIGHER ORDER FUNCTIONS
Functions and patterns
CSCE 314: Programming Languages Dr. Dylan Shell
PROGRAMMING IN HASKELL
Functional Programming
Functions and patterns
Laziness and Its Consequences
?? Programming with Streams Reading assignment
PROGRAMMING IN HASKELL
Presentation transcript:

Haskell Chapter 4

Recursion Like other languages Base case Recursive call Author programs a number of built-in functions as examples Quick: maximum [3,5,4] => 5 What’s the base case? replicate 4 3 => [3,3,3,3] What’s the base case? take 3 [1..10] => [1,2,3] What’s the base case? take 5 [1..3] => [1,2,3] What’s the base case?

Maximum – Recursion w/ pattern matching maximum' :: (Ord a) => [a] -> a maximum' [] = error "can't take maximum of empty list“ -- base case, if only one item, return it maximum' [x] = x -- else return max of first element or recursive call maximum' (x:xs) = max x (maximum' xs)

Replicate – Recursion w/ guards replicate' :: Int -> a -> [a] replicate' n x -- base case returns empty list | n <= 0 = [] -- else cons element to result of recursive call | otherwise = x : replicate' (n-1) x Used guards because boolean condition, not a pattern replicate' 3 5 5 : replicate’ 2 5 => [5,5,5] 5 : replicate’ 1 5 => [5, 5] 5: replicate’ 0 5 => [5] n == 0, => []

Take – Recursion w/ guard + patterns Two base cases (n=0, or empty list) Guard without otherwise will fall through to patterns take' :: (Num i, Ord i) => i -> [a] -> [a] take' n _ | n <= 0 = [] take' _ [] = [] take' n (x:xs) = x : take' (n-1) xs Quick trace – (turn in) take' 20 [1..4] take' 3 [1..4]

Reverse Note ++ rather than : because both are lists : works at front of list, not back reverse' :: [a] -> [a] reverse' [] = [] reverse' (x:xs) = reverse' xs ++ [x] Quick trace (turn in) reverse' [1, 2, 3, 4]

Repeat Haskell supports infinite lists repeat' :: a -> [a] repeat' x = x:repeat' x repeat 3 3: repeat 3 etc, Don’t bother tracing, we don’t have all day. 

Think it through – don’t look ahead! Prelude> zip [1,2,3] [4,5,6] [(1,4),(2,5),(3,6)] How would you write zip? How many base cases? What’s the recursive call? Patterns or guards? give patterns a try! Add to your class participation

Zip zip' :: [a] -> [b] -> [(a,b)] zip' _ [] = [] zip' [] _ = [] zip' (x:xs) (y:ys) = (x,y):zip' xs ys

Quick Exercise With a partner, trace this code with this list of numbers: [5,2,6,7,1,3,9,4] quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerOrEqual = [a | a <- xs, a <= x] larger = [a | a <- xs, a > x] in quicksort smallerOrEqual ++ [x] ++ quicksort larger Add to your class participation

Play and Share? No, let’s start on the homework.