1.SML Docs Standard Basis 2.First-Class Functions Anonymous Style Points Higher-Order 3.Examples Agenda.

Slides:



Advertisements
Similar presentations
More ML Compiling Techniques David Walker. Today More data structures lists More functions More modules.
Advertisements

Higher-order functions in ML
A Third Look At ML 1. Outline More pattern matching Function values and anonymous functions Higher-order functions and currying Predefined higher-order.
Higher-order functions in OCaml. Higher-order functions A first-order function is one whose parameters and result are all "data" A second-order function.
CSE341: Programming Languages Lecture 2 Functions, Pairs, Lists Dan Grossman Winter 2013.
F28PL1 Programming Languages Lecture 14: Standard ML 4.
ML Datatypes.1 Standard ML Data types. ML Datatypes.2 Concrete Datatypes  The datatype declaration creates new types  These are concrete data types,
Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
Chapter ElevenModern Programming Languages1 A Fourth Look At ML.
CSE341: Programming Languages Lecture 12 Equivalence Dan Grossman Spring 2013.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Fall 2011.
CSE341: Programming Languages Lecture 7 Functions Taking/Returning Functions Dan Grossman Fall 2011.
0 PROGRAMMING IN HASKELL Chapter 7 - Higher-Order Functions.
0 PROGRAMMING IN HASKELL Chapter 4 - Defining Functions.
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
Introduction to ML Last time: Basics: integers, Booleans, tuples,... simple functions introduction to data types This time, we continue writing an evaluator.
Introduction to ML You will be responsible for learning ML on your own. Today I will cover some basics Read Robert Harper’s notes on “an introduction to.
Crash course on SML Wojciech Moczydłowski SML – functional programming language Complete formal semantics Extremely convenient for writing compilers, interpreters,
Ormap, andmap, and filter CS 5010 Program Design Paradigms “Bootcamp” Lesson 5.3 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
CS 2104 : Prog. Lang. Concepts. Functional Programming I Lecturer : Dr. Abhik Roychoudhury School of Computing From Dr. Khoo Siau Cheng’s lecture notes.
Programovací jazyky F# a OCaml Chapter 5. Hiding recursion using function-as-values.
ML Datatypes.1 Standard ML Data types. ML Datatypes.2 Concrete Datatypes  The datatype declaration creates new types  These are concrete data types,
CSE-321 Programming Languages Introduction to Functional Programming (Part II) POSTECH March 13, 2006 박성우.
A Second Look At ML 1. Outline Patterns Local variable definitions A sorting example 2.
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.
Chapter SevenModern Programming Languages1 A Second Look At ML.
CSE 341 : Programming Languages Lecture 8 First Class Functions Zach Tatlock Spring 2014.
Haskell Chapter 5, Part II. Topics  Review/More Higher Order Functions  Lambda functions  Folds.
CSE 341 Lecture 8 curried functions Ullman 5.5 slides created by Marty Stepp
CSE 341 : Programming Languages Lecture 9 Lexical Scope, Closures Zach Tatlock Spring 2014.
CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우.
CSE341: Programming Languages Lecture 7 First-Class Functions
ML: a quasi-functional language with strong typing
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Winter 2013.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2013.
CSE341: Programming Languages Lecture 7 First-Class Functions
Nicholas Shahan Spring 2016
CSE341: Programming Languages Lecture 12 Equivalence
Agenda SML Docs First-Class Functions Examples Standard Basis
Agenda SML Docs First-Class Functions Examples Standard Basis
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2016.
CSE341: Programming Languages Lecture 7 First-Class Functions
Functions, Patterns and Datatypes
CSE 341 Section 5 Winter 2018.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 12 Equivalence
CSE341: Programming Languages Lecture 12 Equivalence
Functions, Patterns and Datatypes
Functions, Patterns and Datatypes
CSE 341 Section 3 Nick Mooney Spring 2017.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Zach Tatlock Winter 2018.
CSE-321 Programming Languages Introduction to Functional Programming
CSE341: Programming Languages Lecture 7 First-Class Functions
Functions, Patterns and Datatypes
CSE341: Programming Languages Lecture 7 First-Class Functions
CSE341: Programming Languages Lecture 12 Equivalence
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Autumn 2017.
ormap, andmap, and filter
With thanks to Alexander Lent, Nick Mooney, Spencer Pearson
CSE341: Programming Languages Lecture 7 First-Class Functions
CSE341: Programming Languages Lecture 12 Equivalence
Functions, Patterns and Datatypes
CSE341: Programming Languages Lecture 7 First-Class Functions
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2019.
Brett Wortzman Summer 2019 Slides originally created by Dan Grossman
CSE341: Programming Languages Lecture 7 First-Class Functions
CSE341: Programming Languages Lecture 12 Equivalence
Review Previously in: Lots of language features: functions, lists, records, tuples, variants, pattern matching Today: No new language features New idioms.
Presentation transcript:

1.SML Docs Standard Basis 2.First-Class Functions Anonymous Style Points Higher-Order 3.Examples Agenda

Standard Basis Documentation Online Documentation Helpful Subset Top-Levelhttp:// Listhttp:// ListPair Real String

Anonymous Functions An Anonymous Function fn pattern => expression An expression that creates a new function with no name. Usually used as an argument to a higher-order function. Almost equivalent to the following: let fun name pattern = expression in name end The difference is that anonymous functions cannot be recursive!!! Simple Example fun doSomethingWithFive f = f 5; val x1 = doSomethingWithFive (fn x => x*2); (* x1=10 *) val x2 = (fn x => x+9) 6; (* x2=15 *) val cube = fn x => x*x*x; val x3 = cube 4; (* x3=64 *) val x4 = doSomethingWithFive cube; (* x4=125 *)

Anonymous Functions What's the difference between the following two bindings? val name = fn pattern => expression; fun name pattern = expression; Once again, the difference is recursion. However, excluding recursion, a fun binding could just be syntactic sugar for a val binding and an anonymous function. This is because there are no recursive val bindings in SML.

Anonymous Functions (cont.) Previous Example fun n_times (f,n,x) =if n=0 then x else f (n_times (f, n–1, x)); fun square x = x*x; fun increment x = x+1; val x1 = n_times (square, 2, 3); val x2 = n_times (increment, 4, 7); val x3 = n_times (tl, 2, [4,8,12,16,20]); With Anonymous Functions val x1 = n_times (fn x => x*x, 2, 3); val x2 = n_times (fn x => x+1, 4, 7); val x3 = n_times (fn xs => tl xs, 2, [4,8,12,16,20]);(*Bad Style*)

Unnecessary Function Wrapping What's the difference between the following two expressions? (fn xs => tl xs) vs. tl STYLE POINTS! Other than style, these two expressions result in the exact same thing. However, one creates an unnecessary function to wrap tl. This is very similar to this style issue: (if ex then true else false) vs. ex

Higher-Order Functions A function that returns a function or takes a function as an argument. Two Canonical Examples map : ('a -> 'b) * 'a list -> 'b list – Applies a function to every element of a list and return a list of the resulting values. – Example: map (fn x => x*3, [1,2,3]) === [3,6,9] filter : ('a -> bool) * 'a list -> 'a list – Returns the list of elements from the original list that, when a predicate function is applied, result in true. – Example: filter (fn x => x>2, [~5,3,2,5]) === [3,5] Note: List.map and List.filter are similarly defined in SML but use currying. We'll cover these later in the course.

Defining map and filter map fun map (f, lst) = case lst of [] => [] | x::xs => f x :: map (f,xs) filter fun filter (f, lst) = case lst of [] => [] | x::xs => if f x then x:: filter (f, xs) else filter (f, xs)

Broader Idea Functions are Awesome! SML functions can be passed around like any other value. They can be passed as function arguments, returned, and even stored in data structures or variables. Functions like map are very pervasive in functional languages. – A function like map can even be written for other data structures such as trees. Returning a function fun piecewise x = if x < 0.0 then fn x => x*x else if x < 10.0 then fn x => x / 2.0 else fn x => 1.0 / x + x

Tree Example (*Generic Binary Tree Type *) datatype 'a tree = Empty | Node of 'a * 'a tree * 'a tree (* Apply a function to each element in a tree. *) val treeMap = fn : ('a –> 'b) * 'a tree –> 'b tree (* Returns true iff the given predicate returns true when applied to each element in a tree. *) val treeAll = fn : ('a –> bool) * 'a tree –> bool