Lists. Adrian Groza. Department of Computer Science Technical University of Cluj-Napoca
|
|
- Buck Lindsey
- 6 years ago
- Views:
Transcription
1 Lists Adrian Groza Department of Computer Science Technical University of Cluj-Napoca
2 Recall... Parameter evaluation Call-by-value Call-by-name Call-by-need Functions Infix operators Local declarations, private functions Simultaneous declarations, converting iterative to functional programming
3 Operators precedence and associativity 2 ˆ3 ˆ2 sqrt 2 ˆ2 sqrt 2 ˆ2 == 2 not True 5 < 6 mod truncate 2.8 ˆ == 5 not 2 * 3 == 10 (1,2) < (1,4)
4 Operators precedence infixr 8 infixl 7 infix 7 infixl 6 infixr 5 infix 4 infixr 3 infixr 2 * / +, - : ==, /=, <, <=, >=, > & & exponentiation multiplication division addition, subtraction cons relational comparisons boolean AND boolean OR Note Function application of function names and argument expressions has higher precedence (10) than other operators. Thus the expression f x + y is the same as (f x) + y.
5 Outline 1 Polymorphism Polymorphic Types Polymorphic Equality 2 Lists Constructing Lists List Processing Matrices Composed Lists 3 Food for Thought
6 Polymorphic Types Polymorphism
7 Polymorphic Types Polymorphism Strong vs. Weak typing Strong (Pascal, Java) - provides safety. each value has a unique type Weak (Lisp, Prolog) - provides flexibility. Polymorphic types - try to get the best from both worlds by transferring a part of the reasoning regarding types to the system. Definition An object is polymorphic if it could be seen as having more than one type.
8 Polymorphic Types Polymorphism - Why should I care? Building robust systems One way to ensure that a robust system can deal with objects that have more complex methodologies than were originally intended is to have the object API be polymorphic.
9 Polymorphic Types Polymorphic types Example [1, 2, 3] [ a, b, c ] [[1, 2], [3, 4], [5, 6]] Note that [2, b ] is not a valid example. Polymorphic types describe families of types ( a)[a] is the family of types consisting of, for every type a, the type of lists of a. Type variables Identifiers such as a are called type variables. They are uncapitalised to distinguish them from specific types such as Int: predefined (a,b,c) or user defined (typevar psi epsilon tau)
10 Polymorphic Types Polymorphic functions length [1,2,3] length [ a, b, c ] length [[1],[2],[3]] Observation The length function is an example of a polymorphic function. It can be applied to a list containing elements of any type, for example [Integer], [Char], or [[Integer]]. length :: [a] -> Integer length [] = 0 length (x:xs) = 1 + length xs fun null [] = true null ( :: ) = false; val null = fn a list -> bool Definition A polymorphic function is a function that can be applied to objects of more than one data type.
11 Polymorphic Types Polymorphic Partial Functions Example head :: [a] -> a head (x:xs) = x tail :: [a] -> [a] tail (x:xs) = xs Remark Unlike length, these functions are not defined for all possible values of their argument. A runtime error occurs when these functions are applied to an empty list. (head xs) ++ (tail xs) for xs=[] Definition A partial function is a function which is not defined on its entire domain.
12 Polymorphic Types Type Inference Definition An expression is well-typed if the type checker is able to identify consistent type substitutions for all existing type variables. Example fun facti (n,p) = if n = 0 then p else facti (n-1, n*p); 1 is int n-1 is int n is int n*p multiplication over integers p is int val facti = fn int * int -> int If the type inference lets some types unrestricted the
13 Polymorphic Types Projection Functions fun firstfirst z =first (first z) ; (0) Projection functions return val firstfirst =fn: ( m * n) * b -> m (9) the component of a tuple. firstfirst ((2,3),4); -> 2 fun first (x,y) = x; Type Inference: val first =fn: a * b -> a val first = fn: a * b -> a (1) fun second (x,y) = y; (1) (0) z= a * b (3) val second =fn: a * b -> b (1) (3) first a (4) first ( one,2); (4) (1) a = ( m * n) (5) one: string (3) (5) z = ( m * n) * b (6) second ( one,2); (6) (1) first z returns ( m * n) (7) 2: int (7) (1) first ( m * n) returns m (8) (6) (8) (9) A polymorphic function can have different types within a single expression. first = fn: ( m * n) * b -> m * n first = fn: ( m * n) -> m
14 Polymorphic Equality Polymorphic equality Polymorphic functions don t need the equality predicate: length need equality predicate: member Example (Length) length [] = 0 length (x:xs) = 1 + length xs Example (Member) fun memb (x, []) = false memb (x, (y::ys)) = (x = y) orelse memb(x,ys); val memb = fn: a * a list -> bool
15 Polymorphic Equality Polymorphic equality Definition An equality type is a type endowed with an equality predicate. It is represented by equality type variables, denoted α =, β =... Examples Hugs :type (==) (==) :: Eq a => a -> a -> Bool PolyML op =; val it = fn : a * a -> bool
16 Outline 1 Polymorphism Polymorphic Types Polymorphic Equality 2 Lists Constructing Lists List Processing Matrices Composed Lists 3 Food for Thought
17 Constructing Lists Lists, lists, lists 1 (Irlanda de Nord, 17) 2 (Romania, 16) 3 (Ungaria,13) 4 (Finlanda, 10) 5 (InsuleleFeroe, 6) 6 (Grecia, 3)
18 Constructing Lists List Definition Example [1, 2, 3] [ Fr, Be, Bo, Ro, L ] [] [[1, 2], [3, 4, 5]] [(1, one ), (2, two )] Definition A list is a sequence of values of a specific type. A list is either empty, or is an ordered pair made of an element ( head ) and a list ( tail ). Observation It shows the connection between data and control.
19 Constructing Lists Expressions in Lists As with tuples we can put expressions into lists: Example Hugs [not False] [True] :: [Bool] Hugs [7-3, True then 1 else 2] [4, 1] :: [Integer]
20 Constructing Lists Operations on Lists Example Hugs head [1,2,3,4] 1:: Integer Hugs tail [1,2,3,4] [2, 3, 4] Hugs abcde!!3 d :: Char Hugs [4,5] ++ [ ] ++ [8,9] [4, 5, 8, 9] :: [Integer] Evaluate the following expresions: head bull : tail cat [null (tail [1]), head [null []]]
21 Constructing Lists Constructors Example Haskel operator : (right associative) Hugs 1:2:3:[] [1, 2, 3] ML operator :: (right associative) PolyML 1::2::3::[]; Note val it = [1, 2, 3] : int list Hugs [ a, n, a ] ana ::[Char] Hugs a : n : a :[] ana ::[Char]
22 Constructing Lists List Building Quiz: What does this function do? Example fun i(m,n) = if m > n then [] else m::i(m+1,n); PolyML i(3,8);
23 Constructing Lists Pattern Matching Pattern (x:xs) (1:xs) (1:xs) (x: : :y) Parameter [1, 2, 3] [1, 2, 3] [2, 3] [1, 2, 3, 4, 5] Bindings x=1, xs=[2, 3] xs=[2, 3] Fail x=1, y=[4, 5] val (a,b) = (5,6); val (c,d) = (2,( xx, y )); val (e, (f,g)) = (1, (2,3)); val (l, m, n) = ( xx, (1,2)); (x:y) = [1,2] (x:y) = [[1,2]] (x:y) = [ olemiss ] (x:y) = olemiss (x: : :y) = [1,2,3,4,5,6]
24 List Processing List Processing With Patterns Example fun prodl [] = 1 prodl (n::ns) = n * prodl ns; val prodl = fn: int list -> int PolyML prodl [5,6,7,8]; 1680 : int Example fun prodl ns = if null ns then 1 else hd ns * prod (tl ns); Observation Using patterns increases code clarity and allows a better analysis of cases, thus leading to a better performance of the generated code.
25 List Processing Partial Functions and Pattern Matching Example fun maxl [x] = x maxl (x::y::ys) = if x>y then maxl(x::ys) else maxl(y::ys); Warning: Matches are not exhaustive. Found near fun maxl([x]) = x maxl(...) = if... then...(...) else...(...) val maxl = fn : int list -> int Definition A partial function is a function which is not defined on its entire domain.
26 List Processing Partial Polymorphic Functions fun hd(x:: ) = x; Warning: Matches are not exhaustive. val hd = fn : a list -> a PolyML hd [1, 2, 3]; 1 : int PolyML tl [1, 2, 3]; [2, 3] : int list fun tl( ::xs) = xs; ***Warning: Patterns not exhaustive PolyML tl [ unu, doi, trei ]; [ doi, trei ] : string list PolyML hd [[[1, 2], [3]], [[4]]]]; [[1, 2], [3]] : (int list) list
27 List Processing List Processing Example (Take first n elements of a list) take 0 = [] take k [] = [] take k (xs:xs) = x : take (k-1) xs Example (Drop first n elements of a list) drop 0 xs = xs drop k [] = [] drop k (x:xs) = drop (k-1) xs (drop n xs)! m == xs! (n + m)
28 List Processing List Processing Example (Append of two lists) infixr [] +++ ys = ys (x:xs) +++ ys = x: (xs +++ ys) Example [1,2,3] +++ [4,5] = 1: ([2,3] +++ [4,5]) = 1: (2: ([3] +++ [4,5])) = 1: (2: (3: ([] +++ [4,5]))) = 1: (2: (3: [4,5])) Which of the following equations are true and which are false? 1. [[ ]] +++ xs = xs 2. [[ ]] +++ xs = [xs] 3. [[ ]] +++ xs = [[],xs]
29 List Processing List Processing Example (Reversing a list) invers [] = [] invers (x:xs) = invers xs ++ [x] invers [1,2,3] = invers [2,3] ++ [1] = invers [3] ++ [2] ++ [1] = invers [] ++ [3] ++ [2] ++ [1] = [] ++ [3] ++ [2] ++ [1] = [3] ++ [2] ++ [1] = [3,2] ++ [1] = [3,2,1] inver xs = inv xs [] where inv [] ys = ys inv (x:xs) ys = inv xs (x:ys) inver [1,2,3] = inv [1,2,3] [] = inv [2,3] 1:[] = inv [3] 2:[1] = inv [] 3:[2,1] = inv [] [3,2,1] = [3,2,1]
30 List Processing Big Integers type Bignumber = [Int] prod :: Bignumber -> Int -> Bignumber Hugs prod [1, 2, 3] 4 [2, 9, 4] prod m i = prod1 m 0 where prod1 [] 0 = [] prod1 [] c = (c mod 10): prod1 [] (c div 10) prod1 (d:n) c = let k = d * i + c in (k mod 10) : prod1 n (k div 10) Example fact 0 = [1] fact n = prod (fact (n - 1)) n Hugs fact 20 [0, 0, 0, 0, 4, 6, 6, 7, 1, 8, 0, 0, 2, 0, 9, 2, 3, 4, 2]
31 Matrices Operations with Matrices val mat =[[ x, y, z ], [ u, v, w ]]; val mat [[ x, y, z ], [ u, v, w ]] : string list list fun col [] = [] col ((x:: )::linii) = x::col linii; val col = fn: a list list -> a list fun restcol [] = [] restcol (( ::xs)::linii) = xs::restcol linii; val restcol = fn: a list list -> a list list fun transp ([]::linii) = [] transp linii = col linii:: transp(restcol linii); val trans = fn: a list list -> a list list
32 Composed Lists Quiz Which is the signature and what does this function compute? Example fun f [] = [] f (x::xs) = f xs;
33 Composed Lists Flattening Lists fun flatten [] = [] flatten (x::xs) = flatten xs; val flatten = fn a list list -> a list PolyML flatten [[ brain, sourgeons ], [ never, say ],[ ooops ]]; [ brain, sourgeons, never, say, ooops ] : string list
34 Outline 1 Polymorphism Polymorphic Types Polymorphic Equality 2 Lists Constructing Lists List Processing Matrices Composed Lists 3 Food for Thought
35 Readings Reading Chapter 3 from Ioan Alfred Letia, Programare Functionala
Chapter 3 Linear Structures: Lists
Plan Chapter 3 Linear Structures: Lists 1. Lists... 3.2 2. Basic operations... 3.4 3. Constructors and pattern matching... 3.5 4. Polymorphism... 3.8 5. Simple operations on lists... 3.11 6. Application:
More informationA Second Look At ML. Chapter Seven Modern Programming Languages, 2nd ed. 1
A Second Look At ML Chapter Seven Modern Programming Languages, 2nd ed. 1 Outline Patterns Local variable definitions A sorting example Chapter Seven Modern Programming Languages, 2nd ed. 2 Two Patterns
More informationChapter 3 Linear Structures: Lists
Plan Chapter 3 Linear Structures: Lists 1. Two constructors for lists... 3.2 2. Lists... 3.3 3. Basic operations... 3.5 4. Constructors and pattern matching... 3.6 5. Simple operations on lists... 3.9
More informationA list is a finite sequence of elements. Elements may appear more than once
Standard ML Lists ML Lists.1 Lists A list is a finite sequence of elements. [3,5,9] ["a", "list" ] [] Elements may appear more than once [3,4] [4,3] [3,4,3] [3,3,4] Elements may have any type. But all
More informationA First Look at ML. Chapter Five Modern Programming Languages, 2nd ed. 1
A First Look at ML Chapter Five Modern Programming Languages, 2nd ed. 1 ML Meta Language One of the more popular functional languages (which, admittedly, isn t saying much) Edinburgh, 1974, Robin Milner
More informationCS 320: Concepts of Programming Languages
CS 320: Concepts of Programming Languages Wayne Snyder Computer Science Department Boston University Lecture 04: Basic Haskell Continued o Polymorphic Types o Type Inference with Polymorphism o Standard
More informationCSc 372 Comparative Programming Languages
CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Christian Collberg collberg+372@gmail.com Department of Computer Science University of Arizona Copyright c 2005 Christian Collberg
More informationCSc 372. Comparative Programming Languages. 8 : Haskell Function Examples. Department of Computer Science University of Arizona
1/43 CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg Functions over Lists
More informationSML A F unctional Functional Language Language Lecture 19
SML A Functional Language Lecture 19 Introduction to SML SML is a functional programming language and acronym for Standard d Meta Language. SML has basic data objects as expressions, functions and list
More informationTypes and Type Inference
CS 242 2012 Types and Type Inference Notes modified from John Mitchell and Kathleen Fisher Reading: Concepts in Programming Languages, Revised Chapter 6 - handout on Web!! Outline General discussion of
More informationProcessadors de Llenguatge II. Functional Paradigm. Pratt A.7 Robert Harper s SML tutorial (Sec II)
Processadors de Llenguatge II Functional Paradigm Pratt A.7 Robert Harper s SML tutorial (Sec II) Rafael Ramirez Dep Tecnologia Universitat Pompeu Fabra Paradigm Shift Imperative Paradigm State Machine
More informationOCaml. ML Flow. Complex types: Lists. Complex types: Lists. The PL for the discerning hacker. All elements must have same type.
OCaml The PL for the discerning hacker. ML Flow Expressions (Syntax) Compile-time Static 1. Enter expression 2. ML infers a type Exec-time Dynamic Types 3. ML crunches expression down to a value 4. Value
More informationRedefinition of an identifier is OK, but this is redefinition not assignment; Thus
Redefinition of an identifier is OK, but this is redefinition not assignment; Thus val x = 100; val x = (x=100); is fine; there is no type error even though the first x is an integer and then it is a boolean.
More informationCOSE212: Programming Languages. Lecture 3 Functional Programming in OCaml
COSE212: Programming Languages Lecture 3 Functional Programming in OCaml Hakjoo Oh 2017 Fall Hakjoo Oh COSE212 2017 Fall, Lecture 3 September 18, 2017 1 / 44 Why learn ML? Learning ML is a good way of
More informationNote that pcall can be implemented using futures. That is, instead of. we can use
Note that pcall can be implemented using futures. That is, instead of (pcall F X Y Z) we can use ((future F) (future X) (future Y) (future Z)) In fact the latter version is actually more parallel execution
More informationPlan (next 4 weeks) 1. Fast forward. 2. Rewind. 3. Slow motion. Rapid introduction to what s in OCaml. Go over the pieces individually
Plan (next 4 weeks) 1. Fast forward Rapid introduction to what s in OCaml 2. Rewind 3. Slow motion Go over the pieces individually History, Variants Meta Language Designed by Robin Milner @ Edinburgh Language
More informationIntroduction to SML Basic Types, Tuples, Lists, Trees and Higher-Order Functions
Introduction to SML Basic Types, Tuples, Lists, Trees and Higher-Order Functions Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark c Michael R. Hansen,
More informationCSE 505. Lecture #9. October 1, Lambda Calculus. Recursion and Fixed-points. Typed Lambda Calculi. Least Fixed Point
Lambda Calculus CSE 505 Lecture #9 October 1, 2012 Expr ::= Var λ Var. Expr (Expr Expr) Key Concepts: Bound and Free Occurrences Substitution, Reduction Rules: α, β, η Confluence and Unique Normal Form
More informationCSc 372. Comparative Programming Languages. 4 : Haskell Basics. Department of Computer Science University of Arizona
1/40 CSc 372 Comparative Programming Languages 4 : Haskell Basics Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg 2/40 The Hugs Interpreter The
More informationCSE 3302 Programming Languages Lecture 8: Functional Programming
CSE 3302 Programming Languages Lecture 8: Functional Programming (based on the slides by Tim Sheard) Leonidas Fegaras University of Texas at Arlington CSE 3302 L8 Spring 2011 1 Functional Programming Languages
More informationCSc 372 Comparative Programming Languages. 4 : Haskell Basics
CSc 372 Comparative Programming Languages 4 : Haskell Basics Christian Collberg Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2011 Christian Collberg August 23, 2011
More informationHaske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell
Haskell An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dk The most popular purely functional, lazy programming language Functional programming language : a program
More informationIt is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis
Chapter 14 Functional Programming Programming Languages 2nd edition Tucker and Noonan It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis
More informationAn introduction introduction to functional functional programming programming using usin Haskell
An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dkau Haskell The most popular p purely functional, lazy programming g language Functional programming language : a program
More informationLogical Methods in... using Haskell Getting Started
Logical Methods in... using Haskell Getting Started Jan van Eijck May 4, 2005 Abstract The purpose of this course is to teach a bit of functional programming and logic, and to connect logical reasoning
More informationHaskell 98 in short! CPSC 449 Principles of Programming Languages
Haskell 98 in short! n Syntax and type inferencing similar to ML! n Strongly typed! n Allows for pattern matching in definitions! n Uses lazy evaluation" F definition of infinite lists possible! n Has
More informationPROGRAMMING IN HASKELL. CS Chapter 6 - Recursive Functions
PROGRAMMING IN HASKELL CS-205 - Chapter 6 - Recursive Functions 0 Introduction As we have seen, many functions can naturally be defined in terms of other functions. factorial :: Int Int factorial n product
More informationCMSC 330: Organization of Programming Languages. Functional Programming with Lists
CMSC 330: Organization of Programming Languages Functional Programming with Lists 1 Lists in OCaml The basic data structure in OCaml Lists can be of arbitrary length Implemented as a linked data structure
More informationLists. Michael P. Fourman. February 2, 2010
Lists Michael P. Fourman February 2, 2010 1 Introduction The list is a fundamental datatype in most functional languages. ML is no exception; list is a built-in ML type constructor. However, to introduce
More informationCMSC 330: Organization of Programming Languages. Functional Programming with Lists
CMSC 330: Organization of Programming Languages Functional Programming with Lists CMSC330 Spring 2018 1 Lists in OCaml The basic data structure in OCaml Lists can be of arbitrary length Implemented as
More informationA Brief Introduction to Standard ML
A Brief Introduction to Standard ML Specification and Verification with Higher-Order Logic Arnd Poetzsch-Heffter (Slides by Jens Brandt) Software Technology Group Fachbereich Informatik Technische Universität
More informationAll the operations used in the expression are over integers. a takes a pair as argument. (a pair is also a tuple, or more specifically, a 2-tuple)
Weekly exercises in INF3110 week 41 6-10.10.2008 Exercise 1 Exercise 6.1 in Mitchell's book a) fun a(x,y) = x+2*y; val a = fn : int * int -> int All the operations used in the expression are over integers.
More informationFunctional Paradigm II
Processadors de Llenguatge II Functional Paradigm II Pratt A.7 Robert Harper s SML tutorial (Sec II) Rafael Ramirez Dep Tecnologia Universitat Pompeu Fabra User-Defined Types How to define the new type.
More informationProgramming Languages
CSE 130 : Fall 2008 Programming Languages Lecture 2: A Crash Course in ML Ranjit Jhala UC San Diego News On webpage: Suggested HW #1, sample for Quiz #1 on Thu PA #1 (due next Fri 10/10) No make-up quizzes
More informationIntroduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming
Introduction to ML Mooly Sagiv Cornell CS 3110 Data Structures and Functional Programming Typed Lambda Calculus Chapter 9 Benjamin Pierce Types and Programming Languages Call-by-value Operational Semantics
More informationOCaml. History, Variants. ML s holy trinity. Interacting with ML. Base type: Integers. Base type: Strings. *Notes from Sorin Lerner at UCSD*
OCaml 1. Introduction Rapid introduction to what s in OCaml 2. Focus on Features Individually as Needed as Semester Progresses *Notes from Sorin Lerner at UCSD* History, Variants Meta Language Designed
More informationTypes and Type Inference
Types and Type Inference Mooly Sagiv Slides by Kathleen Fisher and John Mitchell Reading: Concepts in Programming Languages, Revised Chapter 6 - handout on the course homepage Outline General discussion
More informationCSE 341 Section 5. Winter 2018
CSE 341 Section 5 Winter 2018 Midterm Review! Variable Bindings, Shadowing, Let Expressions Boolean, Comparison and Arithmetic Operations Equality Types Types, Datatypes, Type synonyms Tuples, Records
More informationn n Try tutorial on front page to get started! n spring13/ n Stack Overflow!
Announcements n Rainbow grades: HW1-6, Quiz1-5, Exam1 n Still grading: HW7, Quiz6, Exam2 Intro to Haskell n HW8 due today n HW9, Haskell, out tonight, due Nov. 16 th n Individual assignment n Start early!
More informationPROGRAMMING IN HASKELL. Chapter 5 - List Comprehensions
PROGRAMMING IN HASKELL Chapter 5 - List Comprehensions 0 Set Comprehensions In mathematics, the comprehension notation can be used to construct new sets from old sets. {x 2 x {1...5}} The set {1,4,9,16,25}
More informationA Fourth Look At ML. Chapter Eleven Modern Programming Languages, 2nd ed. 1
A Fourth Look At ML Chapter Eleven Modern Programming Languages, 2nd ed. 1 Type Definitions Predefined, but not primitive in ML: datatype bool = true false; Type constructor for lists: datatype 'element
More informationHaskell Types, Classes, and Functions, Currying, and Polymorphism
1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Types, Classes, and Functions, Currying, and Polymorphism 2 Types A type is a collection of related values. For example, Bool contains the
More informationCSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc.
CSC312 Principles of Programming Languages : Functional Programming Language Overview of Functional Languages They emerged in the 1960 s with Lisp Functional programming mirrors mathematical functions:
More informationLecture #23: Conversion and Type Inference
Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). Last modified: Fri Oct 20 10:46:40 2006 CS164:
More informationDatatype declarations
Datatype declarations datatype suit = HEARTS DIAMONDS CLUBS SPADES datatype a list = nil (* copy me NOT! *) op :: of a * a list datatype a heap = EHEAP HEAP of a * a heap * a heap type suit val HEARTS
More informationA general introduction to Functional Programming using Haskell
A general introduction to Functional Programming using Haskell Matteo Rossi Dipartimento di Elettronica e Informazione Politecnico di Milano rossi@elet.polimi.it 1 Functional programming in a nutshell
More informationConversion vs. Subtyping. Lecture #23: Conversion and Type Inference. Integer Conversions. Conversions: Implicit vs. Explicit. Object x = "Hello";
Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). In Java, this is legal: Object x = "Hello";
More informationTypes, Type Inference and Unification
Types, Type Inference and Unification Mooly Sagiv Slides by Kathleen Fisher and John Mitchell Cornell CS 6110 Summary (Functional Programming) Lambda Calculus Basic ML Advanced ML: Modules, References,
More informationHaskell Introduction Lists Other Structures Data Structures. Haskell Introduction. Mark Snyder
Outline 1 2 3 4 What is Haskell? Haskell is a functional programming language. Characteristics functional non-strict ( lazy ) pure (no side effects*) strongly statically typed available compiled and interpreted
More information02157 Functional Programming. Michael R. Ha. Lecture 2: Functions, Types and Lists. Michael R. Hansen
Lecture 2: Functions, Types and Lists nsen 1 DTU Compute, Technical University of Denmark Lecture 2: Functions, Types and Lists MRH 13/09/2018 Outline Functions as first-class citizens Types, polymorphism
More informationCSE341 Autumn 2017, Midterm Examination October 30, 2017
CSE341 Autumn 2017, Midterm Examination October 30, 2017 Please do not turn the page until 2:30. Rules: The exam is closed-book, closed-note, etc. except for one side of one 8.5x11in piece of paper. Please
More informationShell CSCE 314 TAMU. Functions continued
1 CSCE 314: Programming Languages Dr. Dylan Shell Functions continued 2 Outline Defining Functions List Comprehensions Recursion 3 A Function without Recursion Many functions can naturally be defined in
More informationLecture 19: Functions, Types and Data Structures in Haskell
The University of North Carolina at Chapel Hill Spring 2002 Lecture 19: Functions, Types and Data Structures in Haskell Feb 25 1 Functions Functions are the most important kind of value in functional programming
More informationFall Lecture 3 September 4. Stephen Brookes
15-150 Fall 2018 Lecture 3 September 4 Stephen Brookes Today A brief remark about equality types Using patterns Specifying what a function does equality in ML e1 = e2 Only for expressions whose type is
More informationSo what does studying PL buy me?
So what does studying PL buy me? Enables you to better choose the right language but isn t that decided by libraries, standards, and my boss? Yes. Chicken-and-egg. My goal: educate tomorrow s tech leaders
More informationPROGRAMMING IN HASKELL. Chapter 2 - First Steps
PROGRAMMING IN HASKELL Chapter 2 - First Steps 0 The Hugs System Hugs is an implementation of Haskell 98, and is the most widely used Haskell system; The interactive nature of Hugs makes it well suited
More informationA Third Look At ML. Chapter Nine Modern Programming Languages, 2nd ed. 1
A Third Look At ML Chapter Nine Modern Programming Languages, 2nd ed. 1 Outline More pattern matching Function values and anonymous functions Higher-order functions and currying Predefined higher-order
More informationNews. Programming Languages. Complex types: Lists. Recap: ML s Holy Trinity. CSE 130: Spring 2012
News CSE 130: Spring 2012 Programming Languages On webpage: Suggested HW #1 PA #1 (due next Fri 4/13) Lecture 2: A Crash Course in ML Please post questions to Piazza Ranjit Jhala UC San Diego Today: A
More informationAccording to Larry Wall (designer of PERL): a language by geniuses! for geniuses. Lecture 7: Haskell. Haskell 98. Haskell (cont) - Type-safe!
Lecture 7: Haskell CSC 131 Fall, 2014 Kim Bruce According to Larry Wall (designer of PERL): a language by geniuses for geniuses He s wrong at least about the latter part though you might agree when we
More informationThe type checker will complain that the two branches have different types, one is string and the other is int
1 Intro to ML 1.1 Basic types Need ; after expression - 42 = ; val it = 42 : int - 7+1; val it = 8 : int Can reference it - it+2; val it = 10 : int - if it > 100 then "big" else "small"; val it = "small"
More informationCS109A ML Notes for the Week of 1/16/96. Using ML. ML can be used as an interactive language. We. shall use a version running under UNIX, called
CS109A ML Notes for the Week of 1/16/96 Using ML ML can be used as an interactive language. We shall use a version running under UNIX, called SML/NJ or \Standard ML of New Jersey." You can get SML/NJ by
More informationCSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Winter 2013
CSE341: Programming Languages Lecture 9 Function-Closure Idioms Dan Grossman Winter 2013 More idioms We know the rule for lexical scope and function closures Now what is it good for A partial but wide-ranging
More informationIntroduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming
Introduction to ML Mooly Sagiv Cornell CS 3110 Data Structures and Functional Programming The ML Programming Language General purpose programming language designed by Robin Milner in 1970 Meta Language
More informationIf we have a call. Now consider fastmap, a version of map that uses futures: Now look at the call. That is, instead of
If we have a call (map slow-function long-list where slow-function executes slowly and long-list is a large data structure, we can expect to wait quite a while for computation of the result list to complete.
More informationSolution sheet 1. Introduction. Exercise 1 - Types of values. Exercise 2 - Constructors
Solution sheet 1 Introduction Please note that there can be other solutions than those listed in this document. This is a literate Haskell file which is available as PDF, as well as literate Haskell source
More informationCSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Fall 2011
CSE341: Programming Languages Lecture 9 Function-Closure Idioms Dan Grossman Fall 2011 More idioms We know the rule for lexical scope and function closures Now what is it good for A partial but wide-ranging
More informationHaskell through HUGS THE BASICS
Haskell through HUGS THE BASICS FP for DB Basic HUGS 1 Algorithmic Imperative Languages variables assignment if condition then action1 else action2 loop block while condition do action repeat action until
More informationIntroduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming
Introduction to ML Mooly Sagiv Cornell CS 3110 Data Structures and Functional Programming The ML Programming Language General purpose programming language designed by Robin Milner in 1970 Meta Language
More informationList Processing in SML
List Processing in SML CS251 Programming Languages Spring 2017 Lyn Turbak, Meera Hejmadi, Mary Ruth Ngo, & Angela Wu Department of Computer Science Wellesley College Consing Elements into Lists - val nums
More informationCPS 506 Comparative Programming Languages. Programming Language Paradigm
CPS 506 Comparative Programming Languages Functional Programming Language Paradigm Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming
More informationSome Advanced ML Features
Some Advanced ML Features Mooly Sagiv Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming University of Washington: Dan Grossman ML is small Small number of powerful constructs
More informationProgramming Languages
CSE 130: Spring 2010 Programming Languages Lecture 2: A Crash Course in ML Ranjit Jhala UC San Diego News On webpage: Suggested HW #1 PA #1 (due next Wed 4/9) Please post questions to WebCT Today: A crash
More informationBegin at the beginning
Begin at the beginning Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set of
More informationChapter 15. Functional Programming. Topics. Currying. Currying: example. Currying: example. Reduction
Topics Chapter 15 Functional Programming Reduction and Currying Recursive definitions Local definitions Type Systems Strict typing Polymorphism Classes Booleans Characters Enumerations Tuples Strings 2
More informationLecture #13: Type Inference and Unification. Typing In the Language ML. Type Inference. Doing Type Inference
Lecture #13: Type Inference and Unification Typing In the Language ML Examples from the language ML: fun map f [] = [] map f (a :: y) = (f a) :: (map f y) fun reduce f init [] = init reduce f init (a ::
More informationList Processing in SML
CS251 Programming Languages Spring 2016, Lyn Turbak Department of Computer Science Wellesley College Consing Elements into Lists - val nums = 9 :: 4 :: 7 :: []; val nums = [9,4,7] : int list - 5 :: nums;
More informationcs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides.
cs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides. We are looking for homework graders. If you are interested, send mail to cs242cs.stanford.edu
More informationType Checking and Type Inference
Type Checking and Type Inference Principles of Programming Languages CSE 307 1 Types in Programming Languages 2 Static Type Checking 3 Polymorphic Type Inference Version: 1.8 17:20:56 2014/08/25 Compiled
More informationExercises on ML. Programming Languages. Chanseok Oh
Exercises on ML Programming Languages Chanseok Oh chanseok@cs.nyu.edu Dejected by an arcane type error? - foldr; val it = fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b - foldr (fn x=> fn y => fn z => (max
More informationSide note: Tail Recursion. Begin at the beginning. Side note: Tail Recursion. Base Types. Base Type: int. Base Type: int
Begin at the beginning Epressions (Synta) Compile-time Static Eec-time Dynamic Types Values (Semantics) 1. Programmer enters epression 2. ML checks if epression is well-typed Using a precise set of rules,
More informationCSE341: Programming Languages Lecture 2 Functions, Pairs, Lists. Zach Tatlock Winter 2018
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists Zach Tatlock Winter 2018 Function definitions Functions: the most important building block in the whole course Like Java methods, have arguments
More informationThe List Datatype. CSc 372. Comparative Programming Languages. 6 : Haskell Lists. Department of Computer Science University of Arizona
The List Datatype CSc 372 Comparative Programming Languages 6 : Haskell Lists Department of Computer Science University of Arizona collberg@gmail.com All functional programming languages have the ConsList
More informationFunction definitions. CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists. Example, extended. Some gotchas. Zach Tatlock Winter 2018
Function definitions CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists Zach Tatlock Winter 2018 Functions: the most important building block in the whole course Like Java methods, have arguments
More informationTail Recursion: Factorial. Begin at the beginning. How does it execute? Tail recursion. Tail recursive factorial. Tail recursive factorial
Begin at the beginning Epressions (Synta) Compile-time Static Eec-time Dynamic Types Values (Semantics) 1. Programmer enters epression 2. ML checks if epression is well-typed Using a precise set of rules,
More informationTuples. CMSC 330: Organization of Programming Languages. Examples With Tuples. Another Example
CMSC 330: Organization of Programming Languages OCaml 2 Higher Order Functions Tuples Constructed using (e1,..., en) Deconstructed using pattern matching Patterns involve parens and commas, e.g., (p1,p2,
More informationCSE341, Fall 2011, Midterm Examination October 31, 2011
CSE341, Fall 2011, Midterm Examination October 31, 2011 Please do not turn the page until the bell rings. Rules: The exam is closed-book, closed-note, except for one side of one 8.5x11in piece of paper.
More informationCSCC24 Functional Programming Typing, Scope, Exceptions ML
CSCC24 Functional Programming Typing, Scope, Exceptions ML Carolyn MacLeod 1 winter 2012 1 Based on slides by Anya Tafliovich, with many thanks to Gerald Penn and Sheila McIlraith. motivation Consider
More informationProgramming Languages
CSE 130: Fall 2009 Programming Languages Lecture 2: A Crash Course in ML News On webpage: Suggested HW #1 PA #1 (due next Fri 10/9) Technical issues installing Ocaml - should be resolved soon! Ranjit Jhala
More informationChapter 15. Functional Programming Languages
Chapter 15 Functional Programming Languages Copyright 2009 Addison-Wesley. All rights reserved. 1-2 Chapter 15 Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages
More informationProducts and Records
Products and Records Michael P. Fourman February 2, 2010 1 Simple structured types Tuples Given a value v 1 of type t 1 and a value v 2 of type t 2, we can form a pair, (v 1, v 2 ), containing these values.
More informationGADTs. Wouter Swierstra and Alejandro Serrano. Advanced functional programming - Lecture 7. [Faculty of Science Information and Computing Sciences]
GADTs Advanced functional programming - Lecture 7 Wouter Swierstra and Alejandro Serrano 1 Today s lecture Generalized algebraic data types (GADTs) 2 A datatype data Tree a = Leaf Node (Tree a) a (Tree
More informationData Types The ML Type System
7 Data Types 7.2.4 The ML Type System The following is an ML version of the tail-recursive Fibonacci function introduced Fibonacci function in ML in Section 6.6.1: EXAMPLE 7.96 1. fun fib (n) = 2. let
More informationRecursion and Induction: Haskell; Primitive Data Types; Writing Function Definitions
Recursion and Induction: Haskell; Primitive Data Types; Writing Function Definitions Greg Plaxton Theory in Programming Practice, Spring 2005 Department of Computer Science University of Texas at Austin
More informationOverloading, Type Classes, and Algebraic Datatypes
Overloading, Type Classes, and Algebraic Datatypes Delivered by Michael Pellauer Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. September 28, 2006 September 28, 2006 http://www.csg.csail.mit.edu/6.827
More informationA tour of the Haskell Prelude
A tour of the Haskell Prelude Bernie Pope 2001 1 Haskell The Haskell language was conceived during a meeting held at the 1987 Functional Programming and Computer Architecture conference (FPCA 87). At the
More informationGADTs. Alejandro Serrano. AFP Summer School. [Faculty of Science Information and Computing Sciences]
GADTs AFP Summer School Alejandro Serrano 1 Today s lecture Generalized algebraic data types (GADTs) 2 A datatype data Tree a = Leaf Node (Tree a) a (Tree a) This definition introduces: 3 A datatype data
More informationCS 321 Programming Languages
CS 321 Programming Languages Intro to OCaml Lists Baris Aktemur Özyeğin University Last update made on Monday 2 nd October, 2017 at 19:27. Some of the contents here are taken from Elsa Gunter and Sam Kamin
More information02157 Functional Programming Lecture 2: Functions, Basic Types and Tuples
Lecture 2: Functions, Basic Types and Tuples nsen 1 DTU Informatics, Technical University of Denmark Lecture 2: Functions, Basic Types and Tuples MRH 13/09/2012 Outline A further look at functions, including
More informationFunctional Paradigm II
查询 L04B 供应商 捷多邦, 专业 PCB 打样工厂,24 小时加急出货 Processadors de Llenguatge II Functional Paradigm II Pratt A.7 Robert Harper s SML tutorial (Sec II) Rafael Ramirez Dep Tecnologia Universitat Pompeu Fabra User-Defined
More informationCSC324- TUTORIAL 5. Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides
CSC324- TUTORIAL 5 ML Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides Assignment 1 2 More questions were added Questions regarding the assignment? Starting ML Who am I? Shems Saleh
More information