Programming Fundamentals. Lesson 20 Sections


 Asher Higgins
 1 years ago
 Views:
Transcription
1 Programming Fundamentals Lesson 20 Sections
2 Today, we will Study sections, in Haskell. Sections are another class of expressions that represent functions. A section is a binary operation where one of the operands is missing. It represents the unary function in which the missing operand is the argument, so to speak For example, the section (>=10) represents the function (\x > x >= 10) 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 2
3 Section examples Let s try some sections at the console: Main> (++ " do algarve") "universidade" "universidade do algarve" Main> (++ " do algarve") "orquestra" "orquestra do algarve" Main> ("grande " ++) "carro" "grande carro" Main> ("grande " ++) "festa" "grande festa" Main> (`mod` 100) Main> (100 `mod`) 32 4 Main> (100 `mod`) Main> (`min` 20) Main> (`min` 20) Main> (/2) Main> (2/) Main> (+1) Main> (<= 20) 20.3 False Main> (*10) Main> (10^) Main> (^10) Main> (1/) Jan11 Programming Fundamentals  20 Pedro Guerreiro 3
4 Section examples Sections, as lambda expressions, are typically used as arguments to higher order functions: Hugs> map (+1) [5,8,2] [6,9,3] Hugs> map (*2) [5,8,2] [10,16,4] Hugs> map (`min` 20) [19.1, 20.4, 21.4, 16.9, 17.7] [19.1,20.0,20.0,16.9,17.7] Hugs> map (++ ", algarve") ["faro", "tavira", "silves"] ["faro, algarve","tavira, algarve","silves, algarve"] Hugs> filter (<=10) [5,8,12,5,23,44,7,9] [5,8,5,7,9] Hugs> filter (/= 0) [0,3,0,1,1,2] [3,1,1,2] Hugs> map (2^) [0..10] [1,2,4,8,16,32,64,128,256,512,1024] Hugs> map (1/) (map (2^) [0..10]) [1.0,0.5,0.25,0.125,0.0625, , , , , , ] Hugs> until (<0.001) (/2) Jan11 Programming Fundamentals  20 Pedro Guerreiro 4
5 Quicksort with sections Using sections, we can further simplify quicksort: qsort :: Ord a => [a] > [a] qsort [] = [] qsort (x : xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs) This is the standard version of quicksort in Haskell. Remember it, when you have to program quicksort in other languages, in the future. 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 5
6 More exemplary functions The most significant digit: front :: Int > Int front = until (<10) (`div` 10) The last element: lastelem :: [a] > a This function is defined by a function expression. Main> front Main> lastelem [1..512] 512 lastelem = head. until (null. tail) tail 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 6
7 Functions with multiple arguments Indeed, a function signature such as f :: a > b > c must be read as f :: a > (b > c). Thus, f :: a > b > c really means that f is a function with an argument of type a and a result of type (b > c). But (b > c) is the type of functions with an argument of type b and result of type c. This implies that, in this case, an expression f x, where x is an expression of type a, represents a function from b to c. We conclude that f is a function with one argument and a function result, and not a function with two arguments. 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 7
8 Examples of function calls with missing arguments Note that the missing argument must be the last. Function calls with missing arguments are expressions that represent functions, and can be used as arguments to higher order functions, just like sections: Hugs> filter (elem 'a') ["faro", "aveiro", "porto"] ["faro","aveiro"] Main> map (take 2) ["faro", "aveiro", "porto"] ["fa","av","po"] Main> map (div 100) (map (^2) [1..10]) [100,25,11,6,4,2,2,1,1,1] map (max 10) [6,9,12,3,45,8] [10,10,12,10,45,10] Main> map (zip [ ]) ["lisboa", "porto"] [[(1,'l'),(2,'i'),(3,'s'),(4,'b'),(5,'o'),(6,'a')],[ (1,'p'),(2,'o'),(3,'r'),(4,'t'),(5,'o')]] 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 8
9 IsVowel A function to check whether a char is a owercase vowel: isvowel :: Char > Bool  isvowel x = elem x "aeiou"  isvowel x = flip elem "aeiou" x  isvowel x = ((flip elem) "aeiou") x isvowel = flip elem "aeiou" Main> isvowel 's' False Main> isvowel 'o' True Main> filter isvowel "portalegre" "oaee" Main> filter (not. isvowel) "portalegre" "prtlgr" Main> filter (not. flip elem "aeiou") "portalegre" 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 9 "prtlgr" flip' :: (a > b > c) > (b > a > c) flip' f x y = f y x
10 Exercises Program a function to remove all vowels from a string. Consider the following two functions: f :: Integral a => (a, Int) > (a, Int) f (x, y) = (div x 10, y+1) d :: Integral a => a > Int d x = snd (until ((==0).fst) f (x, 0)) What does function d compute? Program a function compute the length of a list, based on the idea embodied by functions d and f above. 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 10
11 Control How many arguments does a Haskell function have? What is a section? What does flip (/) mean? What does a function call with a missing last argument represent? 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 11
12 Tomorrow We will study folds, a group of important higher order functions. 23Jan11 Programming Fundamentals  20 Pedro Guerreiro 12
MEP Y9 Practice Book A
1 Base Arithmetic 1.1 Binary Numbers We normally work with numbers in base 10. In this section we consider numbers in base 2, often called binary numbers. In base 10 we use the digits 0, 1, 2, 3, 4, 5,
More information= 2 + 1 2 2 = 3 4, Now assume that P (k) is true for some fixed k 2. This means that
Instructions. Answer each of the questions on your own paper, and be sure to show your work so that partial credit can be adequately assessed. Credit will not be given for answers (even correct ones) without
More informationMonads for functional programming
Monads for functional programming Philip Wadler, University of Glasgow Department of Computing Science, University of Glasgow, G12 8QQ, Scotland (wadler@dcs.glasgow.ac.uk) Abstract. The use of monads to
More informationDependent Types at Work
Dependent Types at Work Ana Bove and Peter Dybjer Chalmers University of Technology, Göteborg, Sweden {bove,peterd}@chalmers.se Abstract. In these lecture notes we give an introduction to functional programming
More informationNotepads Import File Specification
s Import File Specification To import a notepad file, select the file using the Browse button then click on the Automatic import link: 1. Select the file to import 2. Click on the Automatic Import link
More informationThe Set Data Model CHAPTER 7. 7.1 What This Chapter Is About
CHAPTER 7 The Set Data Model The set is the most fundamental data model of mathematics. Every concept in mathematics, from trees to real numbers, is expressible as a special kind of set. In this book,
More informationSelecting a Subset of Cases in SPSS: The Select Cases Command
Selecting a Subset of Cases in SPSS: The Select Cases Command When analyzing a data file in SPSS, all cases with valid values for the relevant variable(s) are used. If I opened the 1991 U.S. General Social
More informationWISE Power Tutorial All Exercises
ame Date Class WISE Power Tutorial All Exercises Power: The B.E.A.. Mnemonic Four interrelated features of power can be summarized using BEA B Beta Error (Power = 1 Beta Error): Beta error (or Type II
More information(0, 0) : order 1; (0, 1) : order 4; (0, 2) : order 2; (0, 3) : order 4; (1, 0) : order 2; (1, 1) : order 4; (1, 2) : order 2; (1, 3) : order 4.
11.01 List the elements of Z 2 Z 4. Find the order of each of the elements is this group cyclic? Solution: The elements of Z 2 Z 4 are: (0, 0) : order 1; (0, 1) : order 4; (0, 2) : order 2; (0, 3) : order
More informationIntroduction (I) Present Value Concepts. Introduction (II) Introduction (III)
Introduction (I) Present Value Concepts Philip A. Viton February 19, 2014 Many projects lead to impacts that occur at different times. We will refer to those impacts as constituting an (inter)temporal
More informationGoogle s MapReduce Programming Model Revisited
Google s MapReduce Programming Model Revisited Ralf Lämmel Data Programmability Team Microsoft Corp. Redmond, WA, USA Abstract Google s MapReduce programming model serves for processing large data sets
More informationRevised Version of Chapter 23. We learned long ago how to solve linear congruences. ax c (mod m)
Chapter 23 Squares Modulo p Revised Version of Chapter 23 We learned long ago how to solve linear congruences ax c (mod m) (see Chapter 8). It s now time to take the plunge and move on to quadratic equations.
More informationSUBGROUPS OF CYCLIC GROUPS. 1. Introduction In a group G, we denote the (cyclic) group of powers of some g G by
SUBGROUPS OF CYCLIC GROUPS KEITH CONRAD 1. Introduction In a group G, we denote the (cyclic) group of powers of some g G by g = {g k : k Z}. If G = g, then G itself is cyclic, with g as a generator. Examples
More informationConditionals with Cards adapted from Code Studio, Course 2
adapted from Code Studio, Course 2 Created in Partnership with Revision 141011.1a Lesson time: approximately 1 hour. LESSON OVERVIEW We don t always know ahead of time what things will be like when we
More informationSkepticism about the external world & the problem of other minds
Skepticism about the external world & the problem of other minds So far in this course we have, broadly speaking, discussed two different sorts of issues: issues connected with the nature of persons (a
More informationInteger Set Library: Manual
Integer Set Library: Manual Version: isl0.15 Sven Verdoolaege June 11, 2015 Contents 1 User Manual 3 1.1 Introduction............................... 3 1.1.1 Backward Incompatible Changes...............
More informationFDD Process #1: Develop an Overall Model
FDD Process #1: Develop an Overall Model A initial projectwide activity with domain and development members under the guidance of an experienced object modeller in the role of Chief Architect. A highlevel
More informationYou know from calculus that functions play a fundamental role in mathematics.
CHPTER 12 Functions You know from calculus that functions play a fundamental role in mathematics. You likely view a function as a kind of formula that describes a relationship between two (or more) quantities.
More informationMEP Pupil Text 12. A list of numbers which form a pattern is called a sequence. In this section, straightforward sequences are continued.
MEP Pupil Text Number Patterns. Simple Number Patterns A list of numbers which form a pattern is called a sequence. In this section, straightforward sequences are continued. Worked Example Write down the
More informationWHAT ARE MATHEMATICAL PROOFS AND WHY THEY ARE IMPORTANT?
WHAT ARE MATHEMATICAL PROOFS AND WHY THEY ARE IMPORTANT? introduction Many students seem to have trouble with the notion of a mathematical proof. People that come to a course like Math 216, who certainly
More information15251: Great Theoretical Ideas in Computer Science Anupam Gupta Notes on Combinatorial Games (draft!!) January 29, 2012
15251: Great Theoretical Ideas in Computer Science Anupam Gupta Notes on Combinatorial Games (draft!!) January 29, 2012 1 A TakeAway Game Consider the following game: there are 21 chips on the table.
More informationSwitching Algebra and Logic Gates
Chapter 2 Switching Algebra and Logic Gates The word algebra in the title of this chapter should alert you that more mathematics is coming. No doubt, some of you are itching to get on with digital design
More informationComputations in Number Theory Using Python: A Brief Introduction
Computations in Number Theory Using Python: A Brief Introduction Jim Carlson March 2003 Contents 1 Introduction 1 2 Python as a calculator 4 3 Case study: factoring 8 4 Loops and conditionals 11 5 Files
More informationAras Corporation. 2005 Aras Corporation. All rights reserved. Notice of Rights. Notice of Liability
Aras Corporation 2005 Aras Corporation. All rights reserved Notice of Rights All rights reserved. Aras Corporation (Aras) owns this document. No part of this document may be reproduced or transmitted in
More informationProgramming with Arrows
Programming with Arrows John Hughes Department of Computer Science and Engineering, Chalmers University of Technology, S41296 Sweden. 1 Introduction 1.1 Pointfree programming Consider this simple Haskell
More informationEverything you wanted to know about MERGE but were afraid to ask
TS 644 Janice Bloom Everything you wanted to know about MERGE but were afraid to ask So you have read the documentation in the SAS Language Reference for MERGE and it still does not make sense? Rest assured
More informationOrientation Lecture Series: LEARNING TO LEARN Lectures and how to use them
Orientation Lecture Series: LEARNING TO LEARN Lectures and how to use them Outline of Lecture Part 1: to give you some useful strategies for: getting the most out of your lectures taking more effective
More informationShould we hold more referendums in the UK? Ideas for discussion with your students
Should we hold more referendums in the UK? Ideas for discussion with your students Here are some ideas for classroom activities on the subject of referendums. Some are brief and could be used as starters
More information4. FIRST STEPS IN THE THEORY 4.1. A
4. FIRST STEPS IN THE THEORY 4.1. A Catalogue of All Groups: The Impossible Dream The fundamental problem of group theory is to systematically explore the landscape and to chart what lies out there. We
More informationDenotational design with type class morphisms (extended version)
LambdaPix technical report 200901, March 2009 (minor revisions February 15, 2011) 1 Denotational design with type class morphisms (extended version) Conal Elliott LambdaPix conal@conal.net Abstract Type
More information