Functional Programming
Functional Programming
Ralf Hinze
Universit¨ at Kaiserslautern
April 2019
Universit¨ at Kaiserslautern — Ralf Hinze 0.0/1-73
Functional Programming Ralf Hinze Universit at Kaiserslautern - - PowerPoint PPT Presentation
Functional Programming Functional Programming Ralf Hinze Universit at Kaiserslautern April 2019 Universit at Kaiserslautern Ralf Hinze 0.0/1-73 Functional Programming Part 0 Overview Universit at Kaiserslautern Ralf Hinze
Functional Programming
Universit¨ at Kaiserslautern — Ralf Hinze 0.0/1-73
Functional Programming
Universit¨ at Kaiserslautern — Ralf Hinze 0.0/2-73
Functional Programming
Universit¨ at Kaiserslautern — Ralf Hinze 0.0/3-73
Functional Programming Aims
Universit¨ at Kaiserslautern — Ralf Hinze 0.1/4-73
Functional Programming Motivation
Universit¨ at Kaiserslautern — Ralf Hinze 0.2/5-73
Functional Programming Motivation
Universit¨ at Kaiserslautern — Ralf Hinze 0.2/6-73
Functional Programming Motivation
Universit¨ at Kaiserslautern — Ralf Hinze 0.2/7-73
Functional Programming Organization
◮ make good use of me i.e. attend lectures ◮ make good use of my teaching assistant: Sebastian Schweizer ◮ obtain at least a sufficient grade for 75% of the exercises ◮ work and submit in groups of 3–4 ◮ submission: Tuesday 12:00 noon ◮ exercise session: Thursday, 11:45 - 13:15, Room 48-453 ◮ pass the final exam
Universit¨ at Kaiserslautern — Ralf Hinze 0.3/8-73
Functional Programming Contents
Universit¨ at Kaiserslautern — Ralf Hinze 0.4/9-73
Functional Programming Contents
Universit¨ at Kaiserslautern — Ralf Hinze 0.4/10-73
Functional Programming What’s it all about?
◮ x := e,
◮ execution order is important
◮ a + b ∗ c,
◮ evaluation order is unimportant: in
◮ (assumes no side-effects: order matters in ++x + x−−) Universit¨ at Kaiserslautern — Ralf Hinze 0.5/11-73
Functional Programming What’s it all about?
◮ reordering:
◮ common sub-expression elimination:
◮ parallel execution: evaluate sub-expressions concurrently
◮ all that matters about the expression is its value ◮ follows from ‘no side effects’ ◮ . . . which follows from ‘no :=’ ◮ with assignments, side-effect-freeness is hard to check Universit¨ at Kaiserslautern — Ralf Hinze 0.5/12-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/13-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/14-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/15-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/16-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/17-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/18-73
Functional Programming What’s it all about?
public class BinarySearchTree < Elem > { private Tree < Elem > root ; public BinarySearchTree ( ) { root = new Empty ( ) ; } public void inorder ( ) { root . inorder ( ) ; } public void insert (Elem e) { root = root . insert(e ) ; } } public interface Tree < Elem > { void inorder ( ) ; Tree insert (Elem e ) ; } class Empty < Elem extends Comparable < Elem > > implements Tree < Elem > { public void inorder ( ) {} public Tree insert (Elem k) { return new Node (new Empty ( ) , k , new Empty ( ) ) ; } } class Node < Elem extends Comparable < Elem > > implements Tree < Elem > { private Elem a ; private Tree l , r ; public Node (Tree l , Elem a , Tree r) { this . l = l ; this . a = a ; this . r = r ; } public void inorder ( ) { l . inorder ( ) ; System . out . println(a ) ; r . inorder ( ) ; } public Tree insert (Elem k) { if (k . compareTo(a) <= 0) l = l . insert(k ) ; else r = r . insert(k ) ; return this ; } } Universit¨ at Kaiserslautern — Ralf Hinze 0.5/19-73
Functional Programming What’s it all about?
Universit¨ at Kaiserslautern — Ralf Hinze 0.5/20-73
Functional Programming Literature
Universit¨ at Kaiserslautern — Ralf Hinze 0.6/21-73
Functional Programming Literature
Universit¨ at Kaiserslautern — Ralf Hinze 1.0/22-73
Functional Programming Literature
Universit¨ at Kaiserslautern — Ralf Hinze 1.0/23-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/24-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/25-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/26-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/27-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/28-73
Functional Programming Scripts and sessions
Universit¨ at Kaiserslautern — Ralf Hinze 1.1/29-73
Functional Programming Evaluation
Universit¨ at Kaiserslautern — Ralf Hinze 1.2/30-73
Functional Programming Evaluation
Universit¨ at Kaiserslautern — Ralf Hinze 1.2/31-73
Functional Programming Evaluation
Universit¨ at Kaiserslautern — Ralf Hinze 1.2/32-73
Functional Programming Evaluation
Universit¨ at Kaiserslautern — Ralf Hinze 1.2/33-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/34-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/35-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/36-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/36-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/37-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/38-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/39-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/40-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 1.3/41-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/42-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/43-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/44-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/45-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/46-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/47-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/48-73
Functional Programming Definitions
Universit¨ at Kaiserslautern — Ralf Hinze 1.4/49-73
Functional Programming Summary
Universit¨ at Kaiserslautern — Ralf Hinze 1.5/50-73
Functional Programming Summary
Universit¨ at Kaiserslautern — Ralf Hinze 1.5/51-73
Functional Programming Summary
Universit¨ at Kaiserslautern — Ralf Hinze 2.0/52-73
Functional Programming Summary
Universit¨ at Kaiserslautern — Ralf Hinze 2.0/53-73
Functional Programming Strong typing
Universit¨ at Kaiserslautern — Ralf Hinze 2.1/54-73
Functional Programming Strong typing
Universit¨ at Kaiserslautern — Ralf Hinze 2.1/54-73
Functional Programming Strong typing
Universit¨ at Kaiserslautern — Ralf Hinze 2.1/54-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/55-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/56-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/57-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/58-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/59-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/60-73
Functional Programming Simple types and enumerations
Universit¨ at Kaiserslautern — Ralf Hinze 2.2/61-73
Functional Programming Functions
Universit¨ at Kaiserslautern — Ralf Hinze 2.3/62-73
Functional Programming Tuples
Universit¨ at Kaiserslautern — Ralf Hinze 2.4/63-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/64-73
Functional Programming Parametric polymorphism
◮ Int → Int ◮ a → a ◮ (Int, Int) → Int ◮ (a, a) → a ◮ (a, b) → a ◮ Int → (Int → Int) ◮ (Int → Int) → Int ◮ a → (a → a) ◮ (a → a) → a
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/65-73
Functional Programming Parametric polymorphism
◮ case analysis if T is a datatype (more later) ◮ use of application if T is a function type
◮ use of constructors if U is a datatype (more later) ◮ use of lambda expressions if U is a function type Universit¨ at Kaiserslautern — Ralf Hinze 2.5/66-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/67-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/67-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/67-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/67-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/67-73
Functional Programming Parametric polymorphism
Universit¨ at Kaiserslautern — Ralf Hinze 2.5/68-73
Functional Programming Type synonyms
Universit¨ at Kaiserslautern — Ralf Hinze 2.6/69-73
Functional Programming Type classes
Universit¨ at Kaiserslautern — Ralf Hinze 2.7/70-73
Functional Programming Type classes
Universit¨ at Kaiserslautern — Ralf Hinze 2.7/71-73
Functional Programming Type classes
Universit¨ at Kaiserslautern — Ralf Hinze 2.7/72-73
Functional Programming Summary
Universit¨ at Kaiserslautern — Ralf Hinze 2.8/73-73