CSE-321 Programming Languages Introduction to Functional Programming

Slides:



Advertisements
Similar presentations
A Third Look At ML 1. Outline More pattern matching Function values and anonymous functions Higher-order functions and currying Predefined higher-order.
Advertisements

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 – Part 1 Frances Spalding. Assignment 1 chive/fall05/cos441/assignments/a1.ht m
Introduction to ML – Part 1 Kenny Zhu. Assignment 2 chive/fall07/cos441/assignments/a2.ht m
Functional Design and Programming Lecture 1: Functional modeling, design and programming.
CS 312 Spring 2004 Lecture 18 Environment Model. Substitution Model Represents computation as doing substitutions for bound variables at reduction of.
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 - Part 2 Kenny Zhu. What is next? ML has a rich set of structured values Tuples: (17, true, “stuff”) Records: {name = “george”, age.
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.
CSE S. Tanimoto Syntax and Types 1 Representation, Syntax, Paradigms, Types Representation Formal Syntax Paradigms Data Types Type Inference.
Comp 205: Comparative Programming Languages Imperative Programming Languages Functional Programming Languages Semantics Other Paradigms Lecture notes,
VARIABLES, TYPES, INPUT/OUTPUT, ASSIGNMENT OPERATION Shieu-Hong Lin MATH/CS Department Chapel.
CS 2104 : Prog. Lang. Concepts. Functional Programming I Lecturer : Dr. Abhik Roychoudhury School of Computing From Dr. Khoo Siau Cheng’s lecture notes.
CS235 Languages and Automata Department of Computer Science Wellesley College Introduction to Standard ML Wednesday, September 23, 2009 Reading: Beginning.
1 SML fn x => e e 1 e 2 0, 1, 2,..., +, -,... true, false, if e then e else e patterns datatypes exceptions structures functors fun f x = e variables.
CSE-321 Programming Languages Introduction to Functional Programming (Part II) POSTECH March 13, 2006 박성우.
Patterns in OCaml functions. Formal vs. actual parameters Here's a function definition (in C): –int add (int x, int y) { return x + y; } –x and y are.
CSE-321 Programming Languages Overview POSTECH March 3, 2011 박성우.
Functional Programming Language OCaml Tutorial 科大 - 耶鲁联合研究中心
CS-1030 Dr. Mark L. Hornick 1 C++ Language Basic control statements and data types.
A Third Look At ML Chapter NineModern Programming Languages, 2nd ed.1.
CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 7, 2007 박성우.
CS 2104 – Prog. Lang. Concepts Functional Programming II Lecturer : Dr. Abhik Roychoudhury School of Computing From Dr. Khoo Siau Cheng’s lecture notes.
12/9/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox.
Error Example - 65/4; ! Toplevel input: ! 65/4; ! ^^ ! Type clash: expression of type ! int ! cannot have type ! real.
Introduction to Functional Programming
CSE 130 : Spring 2011 Programming Languages Ranjit Jhala UC San Diego Lecture 5: Functions and Closures.
CSE-321 Programming Languages (So Many Topics) POSTECH May 29, 2006 박성우.
1 FP Foundations, Scheme In Text: Chapter Chapter 14: FP Foundations, Scheme Mathematical Functions Def: A mathematical function is a mapping of.
CSE-321 Programming Languages Introduction to Functional Programming POSTECH March 8, 2006 박성우.
CSE-321 Programming Languages Overview POSTECH March 5, 2013 박성우.
Functional Programming Lecture 1 - Introduction Professor Muffy Calder.
CSE-321 Programming Languages Introduction to Functional Programming POSTECH 박성우.
Functional Programming
Programming Languages and Compilers (CS 421)
Principles of programming languages 12: Functional programming
CSE-321 Programming Languages Simply Typed -Calculus
ML: a quasi-functional language with strong typing
Introduction to Computer Science / Procedural – 67130
Object Oriented Programming
Representation, Syntax, Paradigms, Types
A lightening tour in 45 minutes
Comp 205: Comparative Programming Languages
Programming Languages and Compilers (CS 421)
CSE 341: Programming Languages Section 1
CSE 341: Programming Langs
Lecture 15 (Notes by P. N. Hilfinger and R. Bodik)
Elements of Programming Languages
FP Foundations, Scheme In Text: Chapter 14.
Agenda SML Docs First-Class Functions Examples Standard Basis
Agenda SML Docs First-Class Functions Examples Standard Basis
Representation, Syntax, Paradigms, Types
Introduction to Primitive Data types
CSE 341 Section 5 Winter 2018.
ML’s Type Inference and Polymorphism
Representation, Syntax, Paradigms, Types
CSE 341 Section 3 Nick Mooney Spring 2017.
ML’s Type Inference and Polymorphism
CSE-321 Programming Languages Introduction to Functional Programming
Representation, Syntax, Paradigms, Types
CS150 Introduction to Computer Science 1
Compiler Construction
CSE-321 Programming Languages Introduction to Functional Programming
ML’s Type Inference and Polymorphism
ML’s Type Inference and Polymorphism
Compiler Construction
CSE341: Programming Languages Section 1
Drew Wyborski Programming Languages
Introduction to Primitive Data types
Presentation transcript:

CSE-321 Programming Languages Introduction to Functional Programming 박성우 POSTECH March 5, 2009

Programming Paradigms Structured programming C, Pascal, … Object-oriented programming C++, Java, … Logic programming Prolog, … Functional programming SML, Haskell, Objective Caml, Lisp, Scheme, F#, …

Functional Language SML Standard ML ML = Meta-Language An example of programming language whose design is based on the programming language theory type theory Programming language for your assignments

Designer of SML

Familiar?

WTH?

Outline Expressions and values Variables Functions Types Recursion Datatypes Pattern matching Higher-order functions Exceptions Modules

Imperative Language C A program consists of commands. command = “do something” Nothing wrong: if (x == 1) then x = x + 1; else x = x - 1; Nothing wrong either:

Functional Language SML A program consists of expressions. expression = “obtain a value” Nothing wrong: if (x = 1) then x + 1 else x - 1 But this does not make sense: what is the value if x <> 1?

Expression Evaluation An expression “evaluates” to a value. We “evaluate” an expression to obtain a value.

Integer Evaluation 1 + 1 2 1 - 1 1 * 1 1 …

Boolean Evaluation 1 = 1 true 1 <> 1 false 1 <> 0 true …

An Integer Expression if 1 = ~1 then 10 else ~10 if false then 10 else ~10 ~10

Values as Expressions 1 ???

Outline Expressions and values V Variables Functions Types Recursion Datatypes Pattern matching Higher-order functions Exceptions Modules

Variable Declaration - val x = 1 + 1; val x = 2 : int A variable x is “bound” to value 2. From now on, any occurrence of x is replaced by 2. - val y = x + x; val y = 4 : int

Local Declaration let val x = 1 val y = x + x val z = y + y in z + z end 8

Nested Local Declaration let val x = 1 in x + x end let val y = <expression> in y + y end let val y = let val x = 1 in x + x end in y + y end

Why “Local”? let val y = let val x = 1 in x + x end x + y okay???

Variables are NOT variable. The contents of a variable never change. immutability of variables Surprise? That’s because you are thinking about variables in imperative programming. variables in SML <> variables in C

Then Why Variables? Any advantage in using variables at all? let val x = 1 val y = x + x val z = y + y in z + z end ((1 + 1) + (1 + 1)) + ((1 + 1) + (1 + 1)) VS. What if it takes 10 hours to evaluate 1?

Outline Expressions and values V Variables V Functions Types Recursion Datatypes Pattern matching Higher-order functions Exceptions Modules

When is the first time you learned the concept of function?

즐거운 낱말 공부 시간 함수(函數): 두 변수 x, y간에 어떤 관계가 있어 x의 변화에 따라 y가 일정한 법칙으로 변화할 때 y를 x의 함수라 함. (function) (동아 마스타 국어사전)

函 즐거운 한자 공부 시간 1. 함(함). 2. 편지(함) 3. 갑옷(함) 4. 넣을, 들일(함) 예: (書函) 서함: 책을 넣는 상자

Function = 函數 = Box Number!

Using a Box Number

Using a Box Number - Generalized … …

Function in SML = Box Number (fn x => x + 1) n =

Function Application (fn x => x + 1) n … (fn x => x + 1) n We “apply” (fn x => x + 1) to n. x is called a formal argument/parameter. n is called an actual argument/parameter.

Evaluating a Function Application … (fn x => x + 1) n n + 1

Functions in SML Nameless function fn x => x + 1; Storing a nameless function to a variable val incr = fn x => x + 1; Function declaration fun incr x = x + 1;

Function Applications incr 1 (fn x => x + 1) 1 1 + 1 2

First-class Objects First-class objects = primitive objects can be stored in a variable. can be passed as an argument to a function. can be returned as a return value of a function. Examples: integers booleans characters floating-point numbers …

First-class Objects in C integers characters floating-point numbers pointers structures … Functions? Function pointers are first-class objects. But functions are not. Why? You cannot create new functions on the fly!

Functions = First-class Objects in SML can be passed as an argument to a function. can be returned as a return value of a function.

Box Number as Output … … such that

Box Number as Output x … +x …

Box Number as Output x y y+x

Box Number as Output x y fn y => y+x y+x

Box Number as Output x y fn y => y+x y+x fn y => y+x

Box Number as Output x y y+x fn x => (fn y => y+x)

In SML Recall the following declarations are equivalent: val incr = fn x => x + 1; fun incr x = x + 1; Then: val add = fn x => (fn y => y + x); fun add x = fn y => y + x; fun add x y = y + x; add takes only one argument, not two! In fact, every function in SML takes only one argument.

(fn x => (fn y => y + x)) 1 2 Adding Two Integers add 1 2 (fn x => (fn y => y + x)) 1 2 (fn y => y + 1) 2 2 + 1 3

Box Number as Input ( true, false)

Box Number as Input f fn f => (f true, f false) ( f true, f false)

Outline Expressions and values V Variables V Functions V Types Recursion Datatypes Pattern matching Higher-order functions Exceptions Modules

Types A type specifies what kind of value a given expression evaluates to. 1 + 1 : int true andalso false : bool #”A” : char ”hello” : string (1, true) : int * bool (1, ~1, true) : int * int * bool 1.0 : real () : unit

Type Preservation Expression : T Value : T An evaluation preserves the type of a given expression.

Example let val x = 1 val y = x + x val z = y + y in z + z end : int

Function Types T -> T’ type of functions: taking arguments of type T returning values of type T’ Example: val incr = fn x => x + 1; val incr = fn : int -> int fun incr x = x + 1; val incr = fn : int -> int Explicit type annotation val incr = fn (x:int) => x + 1; val incr = fn (x:int) : int => x + 1; fun incr (x:int) = x + 1; fun incr (x:int) : int = x + 1;

Type of add x fn y => y+x fn x => (fn y => y+x)

Type of add int fn x => (fn y => y+x) fn y => y+x

Type of add int fn x => (fn y => y+x) int -> int

Type of add int int -> (int -> int) int -> int

What is the Type? f fn f => (f true, f false) ( f true, f false)

f : bool -> int ? ( true, false) f : (bool -> int) -> int * int fn f => (f true, f false) ( f true, f false)

But why is it f : bool -> int ?

Why not f : bool -> char ? char * char fn f => (f true, f false) ( f true, f false)

f : bool -> int * string ? f : bool -> unit ? Then why not f : bool -> string ? f : bool -> int * string ? f : bool -> unit ? f : bool -> (int -> int) ? f : bool -> <crazy type> ? …

So we need Polymorphism.

Announcement Assignment 1 will be out tonight. Due at 11:59pm, March 12 (next Thursday) Details of the instruction are all in the handout. If you don't find your handin directory, email me. Makeup lecture 정통연 143호, 9:30am, tomorrow