0 PROGRAMMING IN HASKELL Chapter 11 - The Countdown Problem.

Slides:



Advertisements
Similar presentations
CS4026 Formal Models of Computation Part II The Logic Model Lecture 6 – Arithmetic, fail and the cut.
Advertisements

CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists Dan Grossman Winter 2013.
CALCULATING AN EXCEPTIONAL MACHINE Graham Hutton and Joel Wright University of Nottingham.
8. Introduction to Denotational Semantics. © O. Nierstrasz PS — Denotational Semantics 8.2 Roadmap Overview:  Syntax and Semantics  Semantics of Expressions.
Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
0 PROGRAMMING IN HASKELL Chapter 10 - Declaring Types and Classes.
String is a synonym for the type [Char].
© M. Winter COSC 4P41 – Functional Programming Abstract data types (ADTs) An ADT is a data type together with some functions to manipulate elements.
0 LECTURE 5 LIST COMPREHENSIONS Graham Hutton University of Nottingham.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
What is a Parser? A parser is a program that analyses a piece of text to determine its syntactic structure  3 means 23+4.
Chapter 7Louden, Programming Languages1 Chapter 7 - Control I: Expressions and Statements "Control" is the general study of the semantics of execution.
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists Dan Grossman Fall 2011.
0 PROGRAMMING IN HASKELL Chapter 5 - List Comprehensions.
Complexity Analysis (Part I)
>(setf oldlist ) Constructing a list We know how to make a list in lisp; we simply write it: ‘4321( ) What if we want a new list with that list as a part?
Data Abstraction and Object- Oriented Programming CS351 – Programming Paradigms.
Describing Syntax and Semantics
Chapter 7Louden, Programming Languages1 Chapter 7 - Control I: Expressions and Statements "Control" is the general study of the semantics of execution.
SOLVING SUDOKU Graham Hutton University of Nottingham (with thanks to Richard Bird)
Solving Systems of Equations
0 PROGRAMMING IN HASKELL Chapter 11 - Interactive Programs, Declaring Types and Classes.
Data Structures and Algorithm Analysis Hashing Lecturer: Jing Liu Homepage:
Analysis of Algorithms
0 REVIEW OF HASKELL A lightening tour in 45 minutes.
0 PROGRAMMING IN HASKELL Chapter 9 - Higher-Order Functions, Functional Parsers.
Com Functional Programming Regular Expressions and Abstract Data Types Marian Gheorghe Lecture 14 Module homepage Mole &
© M. Winter COSC 4P41 – Functional Programming Programming with actions Why is I/O an issue? I/O is a kind of side-effect. Example: Suppose there.
A Third Look At ML Chapter NineModern Programming Languages, 2nd ed.1.
CSE 341 : Programming Languages Lecture 2 Functions, Pairs, Lists Zach Tatlock Spring 2014.
1-4 6th grade math Addition Properties.
THE COUNTDOWN PROBLEM Graham Hutton University of Nottingham.
Function Definition by Cases and Recursion Lecture 2, Programmeringsteknik del A.
March 31, ICE 1341 – Programming Languages (Lecture #11) In-Young Ko Programming Languages (ICE 1341) Lecture #11 Programming Languages (ICE 1341)
Computer Sciences Department1.  Property 1: each node can have up to two successor nodes (children)  The predecessor node of a node is called its.
1 Recursive algorithms Recursive solution: solve a smaller version of the problem and combine the smaller solutions. Example: to find the largest element.
More Data Types CSCE 314 Spring CSCE 314 – Programming Studio Defining New Data Types Three ways to define types: 1.type – Define a synonym for.
Elimination Method - Systems. Elimination Method  With the elimination method, you create like terms that add to zero.
What is a Parser? A parser is a program that analyses a piece of text to determine its syntactic structure  3 means 23+4.
String is a synonym for the type [Char].
CSC Modeling with FD Constraints
PROGRAMMING IN HASKELL
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
A lightening tour in 45 minutes
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
Graph-Based Operational Semantics
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
FP Foundations, Scheme In Text: Chapter 14.
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
Background In his classic 1972 paper on definitional interpreters, John Reynolds introduced two key techniques: Continuation-passing style - Makes.
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
Types and Classes in Haskell
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
Using the Properties Together
Verifying a compiler for a simple language with exceptions (MPC 04).
CSCE 314: Programming Languages Dr. Dylan Shell
PROGRAMMING IN HASKELL
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
PROGRAMMING IN HASKELL
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists
Presentation transcript:

0 PROGRAMMING IN HASKELL Chapter 11 - The Countdown Problem

1 What Is Countdown? zA popular quiz programme on British television that has been running since zBased upon an original French version called "Des Chiffres et Des Lettres". zIncludes a numbers game that we shall refer to as the countdown problem.

2 Example Using the numbers and the arithmetic operators  construct an expression whose value is

3 Rules zAll the numbers, including intermediate results, must be positive naturals (1,2,3,…). zEach of the source numbers can be used at most once when constructing the expression. zWe abstract from other rules that are adopted on television for pragmatic reasons.

4 For our example, one possible solution is zThere are 780 solutions for this example. zChanging the target number to gives an example that has no solutions. Notes: 831 (25-10)  (50+1) 765 =

5 Evaluating Expressions Operators: data Op = Add | Sub | Mul | Div Apply an operator: apply :: Op  Int  Int  Int apply Add x y = x + y apply Sub x y = x - y apply Mul x y = x * y apply Div x y = x `div` y

6 Decide if the result of applying an operator to two positive natural numbers is another such: valid :: Op  Int  Int  Bool valid Add _ _ = True valid Sub x y = x > y valid Mul _ _ = True valid Div x y = x `mod` y == 0 Expressions: data Expr = Val Int | App Op Expr Expr

7 eval :: Expr  [Int] eval (Val n) = [n | n > 0] eval (App o l r) = [apply o x y | x  eval l, y  eval r, valid o x y] Return the overall value of an expression, provided that it is a positive natural number: Either succeeds and returns a singleton list, or fails and returns the empty list.

8 Formalising The Problem Return a list of all possible ways of choosing zero or more elements from a list: choices :: [a]  [[a]] For example: > choices [1,2] [[],[1],[2],[1,2],[2,1]]

9 Return a list of all the values in an expression: values :: Expr  [Int] values (Val n) = [n] values (App _ l r) = values l ++ values r Decide if an expression is a solution for a given list of source numbers and a target number: solution :: Expr  [Int]  Int  Bool solution e ns n = elem (values e) (choices ns) && eval e == [n]

10 Brute Force Solution Return a list of all possible ways of splitting a list into two non-empty parts: split :: [a]  [([a],[a])] For example: > split [1,2,3,4] [([1],[2,3,4]),([1,2],[3,4]),([1,2,3],[4])]

11 Return a list of all possible expressions whose values are precisely a given list of numbers: exprs :: [Int]  [Expr] exprs [] = [] exprs [n] = [Val n] exprs ns = [e | (ls,rs)  split ns, l  exprs ls, r  exprs rs, e  combine l r] The key function in this lecture.

12 combine :: Expr  Expr  [Expr] combine l r = [App o l r | o  [Add,Sub,Mul,Div]] Combine two expressions using each operator: solutions :: [Int]  Int  [Expr] solutions ns n = [e | ns'  choices ns, e  exprs ns', eval e == [n]] Return a list of all possible expressions that solve an instance of the countdown problem:

13 How Fast Is It? System: Compiler: Example: One solution: All solutions: solutions [1,3,7,10,25,50] GHz Pentium M laptop GHC version seconds seconds

14 zMany of the expressions that are considered will typically be invalid - fail to evaluate. zFor our example, only around 5 million of the 33 million possible expressions are valid. zCombining generation with evaluation would allow earlier rejection of invalid expressions. Can We Do Better?

15 results :: [Int]  [Result] results ns = [(e,n) | e  exprs ns, n  eval e] type Result = (Expr,Int) Valid expressions and their values: We seek to define a function that fuses together the generation and evaluation of expressions: Fusing Two Functions

16 results [] = [] results [n] = [(Val n,n) | n > 0] results ns = [res | (ls,rs)  split ns, lx  results ls, ry  results rs, res  combine' lx ry] This behaviour is achieved by defining combine' :: Result  Result  [Result] where

17 solutions' :: [Int]  Int  [Expr] solutions' ns n = [e | ns'  choices ns, (e,m)  results ns', m == n] New function that solves countdown problems: combine’ (l,x) (r,y) = [(App o l r, apply o x y) | o  [Add,Sub,Mul,Div], valid o x y] Combining results:

18 How Fast Is It Now? Example: One solution: All solutions: solutions' [1,3,7,10,25,50] seconds 3.47 seconds Around 10 times faster in both cases.

19 zMany expressions will be essentially the same using simple arithmetic properties, such as: zExploiting such properties would considerably reduce the search and solution spaces. Can We Do Better? x  yy  x x  1 x = =

20 Exploiting Properties Strengthening the valid predicate to take account of commutativity and identity properties: valid :: Op  Int  Int  Bool valid Add x y = True valid Sub x y = x > y valid Mul x y = True valid Div x y = x `mod` y == 0 x  y x  y && x  1 x  y && x  1 && y  1 x  y && y  1

21 How Fast Is It Now? Example: Valid: Solutions: solutions'' [1,3,7,10,25,50] ,000 expressions 49 expressions Around 20 times less. Around 16 times less.

22 One solution: All solutions: 0.02 seconds 0.44 seconds Around 2 times faster. Around 7 times faster. More generally, our program usually produces a solution to problems from the television show in an instant, and all solutions in under a second.