Standard Library and Functional Concepts in Programming

CSE 341
Section 3
Nicholas Shahan
Spring 2016
Adapted from slides by Cody A. Schroeder, and Dan Grossman
Today’s Agenda
Standard Library Documentation (for HW3)
Anonymous Functions
“Unnecessary Function Wrapping”
Returning Functions
High-Order Functions
Map
Filter
Fold
More Practice
Tree example
Expression example
2
What is in a Standard Library?
Things that you simply can’t implement on your
own.
Creating a timer, opening a file, etc.
Things that are so common a “standardized”
version will save you time and effort
List.map, string concatenation, etc.
A standard library makes writing and reading code
easier.
Common operations don’t have to be implemented, and
are immediately recognizable.
3
Standard Library Documentation
Online Documentation
http://www.standardml.org/Basis/index.html
http://www.smlnj.org/doc/smlnj-lib/Manual/toc.html
Helpful Subset
Top-Level
 
http://www.standardml.org/Basis/top-level-chapter.html
List
  
http://www.standardml.org/Basis/list.html
ListPair 
 
http://www.standardml.org/Basis/list-pair.html
Real 
  
http://www.standardml.org/Basis/real.html
String 
  
http://www.standardml.org/Basis/string.html
4
Anonymous Functions
An expression that evaluates to a new function
with no name
Usually used as an argument or returned from a
higher-order function
Almost equivalent to the following:
fn
 
pattern
 
=>
 
expression
let
 
fun
 
name
 
pattern
 
=
 
expression
 
in
 
name
 
end
The difference is that anonymous functions cannot
be recursive!
5
"Unnecessary Function Wrapping"
When called both functions will evaluate to the same result
However, one creates an unnecessary function to wrap 
tl
Compare to:
6
Returning Functions
Remember - Functions are first-class values
We can return them from functions
Example:
Has type 
(int -> bool) -> (int -> int)
The REPL will print 
(int -> bool) -> int -> int
because it never prints an unnecessary parenthesis
fun
 
double_or_triple
 f 
=
 
if
 f 7
 
then
 
fn
 x 
=>
 2 
*
 x
 
else
 
fn
 x 
=>
 3 
*
 x
7
High-order Hall of Fame
fun 
map
 
(f, xs) 
=
   case 
xs
 of
     
[]
 
=>
 
[]
   
|
 
x
::
xs’ 
=> 
(f x)
:
:
(map(f, xs’))
fun 
filter
 
(f, xs)
 
=
   case xs of
     
[] 
=>
 []
   
|
 x
::
xs’ 
=>
 
if
 f x
               
then
 x
::
(filter(f, xs’))
               
else
 filter(f, xs’)
8
Fold
Fold
 (synonyms/close relatives 
reduce
, 
inject
, etc.) is
another very famous iterator over recursive structures
Accumulates an answer by repeatedly applying a function 
f
to the answer so far
fold(f, acc,[x1, x2, x3, x4])
 computes
f(f(f(f(acc, x1),x2),x3),x4)
fun 
fold
 
(f, acc, xs)
 
=
   case 
xs 
of
      
[]
    
=>
 
acc
    
|
 
x
::
xs’
 
=>
 
fold(f, f(acc, x), xs’)
val fold = fn : ('a * 'b -> 'a) * 'a * 'b list -> 'a
9
Practice - 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 tree_map = fn: (' a -> 'b) * 'a tree -> 'b tree
(* Returns true iff the given predicate returns true
when applied to each element in a tree. *)
val tree_all = fn: (' a -> bool) * 'a tree -> bool
10
Practice - Expression Example
(* Modified expression datatype from lecture 5. Now
   there are variables. *)
datatype 
exp 
=
 Constant 
of
 int
  
|
 Negate 
of
 exp
  
|
 Add 
of
 exp 
*
 exp
  
|
 Multiply 
of
 exp 
*
 exp
  
|
 Var 
of
 string
(* Do a post order traversal of the given exp. At each
node, apply a function f to it and replace the node with
the result. *)
val visit_post_order = fn : (exp -> exp) * exp -> exp
(* Simplify the root of the expression if possible. *)
val simplify_once = fn : exp -> exp
(* Almost the same as evaluate but leaves variables
alone. *)
val simplify = fn : exp -> exp
11
Slide Note
Embed
Share

Discover the importance of a standard library in programming, explore topics like anonymous functions, unnecessary function wrapping, returning functions, and high-order functions. Get insights into common operations and how functional concepts enhance coding efficiency and readability.

  • Programming Concepts
  • Functional Programming
  • Standard Library
  • High-Order Functions
  • Anonymous Functions

Uploaded on Sep 18, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. CSE 341 Section 3 Nicholas Shahan Spring 2016 Adapted from slides by Cody A. Schroeder, and Dan Grossman

  2. Todays Agenda Standard Library Documentation (for HW3) Anonymous Functions Unnecessary Function Wrapping Returning Functions High-Order Functions Map Filter Fold More Practice Tree example Expression example 2

  3. What is in a Standard Library? Things that you simply can t implement on your own. Creating a timer, opening a file, etc. Things that are so common a standardized version will save you time and effort List.map, string concatenation, etc. A standard library makes writing and reading code easier. Common operations don t have to be implemented, and are immediately recognizable. 3

  4. Standard Library Documentation Online Documentation http://www.standardml.org/Basis/index.html http://www.smlnj.org/doc/smlnj-lib/Manual/toc.html Helpful Subset Top-Level List ListPair Real String http://www.standardml.org/Basis/top-level-chapter.html http://www.standardml.org/Basis/list.html http://www.standardml.org/Basis/list-pair.html http://www.standardml.org/Basis/real.html http://www.standardml.org/Basis/string.html 4

  5. Anonymous Functions fn pattern => expression An expression that evaluates to a new function with no name Usually used as an argument or returned from 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! 5

  6. "Unnecessary Function Wrapping" fn x => f x f vs. When called both functions will evaluate to the same result However, one creates an unnecessary function to wrap tl Compare to: if e1 then true else false el vs. Good Style: Happy TA x > 0 n_times(tl, 3, xs) Bad Style: Lose Points if x > 0 then true else false n_times((fn ys => tl ys), 3, xs) 6

  7. Returning Functions Remember - Functions are first-class values We can return them from functions Example: fun double_or_triple f = if f 7 then fn x => 2 * x else fn x => 3 * x Has type (int -> bool) -> (int -> int) The REPL will print (int -> bool) -> int -> int because it never prints an unnecessary parenthesis 7

  8. High-order Hall of Fame fun map (f, xs) = case xs of [] => [] | x::xs => (f x)::(map(f, xs )) fun filter (f, xs) = case xs of [] => [] | x::xs => if f x then x::(filter(f, xs )) else filter(f, xs ) 8

  9. Fold Fold (synonyms/close relatives reduce, inject, etc.) is another very famous iterator over recursive structures Accumulates an answer by repeatedly applying a function f to the answer so far fold(f, acc,[x1, x2, x3, x4]) computes f(f(f(f(acc, x1),x2),x3),x4) fun fold (f, acc, xs) = case xs of [] => acc | x::xs => fold(f, f(acc, x), xs ) val fold = fn : ('a * 'b -> 'a) * 'a * 'b list -> 'a 9

  10. Practice - 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 tree_map = fn: (' a -> 'b) * 'a tree -> 'b tree (* Returns true iff the given predicate returns true when applied to each element in a tree. *) val tree_all = fn: (' a -> bool) * 'a tree -> bool 10

  11. Practice - Expression Example (* Modified expression datatype from lecture 5. Now there are variables. *) datatype exp = Constant of int | Negate of exp | Add of exp * exp | Multiply of exp * exp | Var of string (* Do a post order traversal of the given exp. At each node, apply a function f to it and replace the node with the result. *) val visit_post_order = fn : (exp -> exp) * exp -> exp (* Simplify the root of the expression if possible. *) val simplify_once = fn : exp -> exp (* Almost the same as evaluate but leaves variables alone. *) val simplify = fn : exp -> exp 11

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#