Top Banner
Haskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia, Summer 2015 Overview of Day 2
26

Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Jun 30, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Haskell: Programming with Functions

Niki Vazou, Pablo Serrano Clubes de Ciencia, Summer 2015

Overview of Day 2

Page 2: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Cabal: Haskell Package Manager

Package or Library: a group of functions that implement a functionality

Data.CharData.List

NLP.StemmerPrelude

Page 3: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Cabal: Haskell Package Manager

A cabal is a group of people united in some close design together, usually to promote their private views or interests in a church, state, or

other community, often by intrigue, usually unbeknownst to persons outside their group.*

*Wikipedia

Page 4: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Cabal: Haskell Package Manager

Haskell Developer Haskell User

Page 5: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Cabal: Haskell Package Manager

Haskell User

Download: `cabal install steemer`

import in code: `import NPL.Steemer`

Page 6: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Importing things

import NPL.Steemer

import Data.Chat (toLower)

import Prelude hiding (tail)

import qualified Data.Char as C

Page 7: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Type Classes

A type class is an interface that defines some behavior.

class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool

class name

class method(s)

Page 8: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Type Class Instances

Define how a type instantiates a class

instance Eq a => Eq (Err a) where err1 == err2 = eqErr err1 err2

Now I can use (==) on `Err a` expressions

Page 9: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Type Class Constraints

Constrain type variables to be instances of type class

(==) :: (Eq a) => a -> a -> Bool

constraint

Constraints are propagated!

checkEq :: (Eq a) => a -> a -> String checkEq x y | x == y = “Equal” | otherwise = “Different”

Page 10: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Why Type Classes?

• It is an abstraction! • Use the same (==) operator to things of different type • Determine the implementation of (==) from the type • Haskell will figure out the correct implementation • Overloading

Page 11: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Data TypesUsually, a collection of labelled things

data Err a = Value a | Error a

type constructor

type variable(s)

data constructor

type argument(s)

OR

Page 12: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List: The Data Type

data [a] = [] | (:) a [a]

empty

cons

Page 13: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List Manipulation

Recursion

Higher Order Functions

Page 14: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Recursion

length [] = 0 length (x:xs) = 1 + length xs

Prove that for every list xs, list xs >= 0

Page 15: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Induction

Prove:

If S(0) and S(n) => S(n+1), then for all n. S(n)

Page 16: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Structural Induction

If S([]) and S(xs) => S(x:xs), then for all ls. S(ls)

Prove that for every list xs, length xs >= 0

length [] = 0 length (x:xs) = 1 + length xs

Page 17: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Recursion

length [] = 0 length (x:xs) = 1 + length xs

Prove that length terminates

Should functions always terminate?

No. Remember fibs?

Page 18: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List Manipulation

Recursion

Higher Order Functions

Page 19: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Higher Order Functions

map :: (a -> b) -> a -> b

foldr :: (a -> b -> b) -> b -> [a] -> b

Page 20: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Today

String Manipulation

Type Inference: The theory break

Binary Search TreesMonads

Currying

List Comprehension

Page 21: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Currying Transform a function with many arguments

to a function with one argument

plus1 :: (Int, Int) -> Int plus1(x, y) = x + y

plus2 :: Int -> Int -> Int plus2 x y = x + y

Page 22: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

Currying

plus2 :: Int -> Int -> Int plus2 x y = x + y

plus2 takes an Int and returns a function

If we apply the first argument we get a function

plus2 4 :: Int -> Int

Page 23: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

• American mathematician and logician • Known for his work in combinatory logic • Curry–Howard correspondence

Curry (1900 – 1982)

Statement Proof

Type Function

Math

Programs

Haskell

Page 24: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List Comprehension

filter p xs == [x | x <- xs, p x]

[(7, 7*i)| i <- [1..10]]

Multiplication Tables

[(i,j)| i <- [1..10], j <- [1..i]]

All Combinations

Page 25: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List Comprehension

factors 5 = [] factors 12 = [2, 3, 4, 6]

FactorsDefine a function factors n which returns a list of the integers

that divide n. Omit the trivial factors 1 and n.

Examples:

factors n = [i | i<-[2..n-1], n `mod` i == 0]

Page 26: Haskell: Programming with Functions Overview of Day 2goto.ucsd.edu/~nvazou/club_de_science15/day2.pdfHaskell: Programming with Functions Niki Vazou, Pablo Serrano Clubes de Ciencia,

List Comprehension

triads 5 = [(3,4,5), (4,3,5)]

Pythagorean Triads

Generate a list of triples (x,y,z) such that x^2+y^2=z^2 and x,y,z <= n.

Examples:

triads n = [(x, y, z) | x<-[1..n], y<-[1..n], z<-[1..n], x^2+y^2==z^2]