Functional Programming Concepts

Slides:



Advertisements
Similar presentations
1 Scheme and Functional Programming Aaron Bloomfield CS 415 Fall 2005.
Advertisements

Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
1 Programming Languages and Paradigms Lisp Programming.
Introduction to Artificial Intelligence Lisp Ruth Bergman Fall 2002.
Week 10 Recap CSE 115 Spring For-each loop When we have a collection and want to do something to all elements of that collection we use the for-each.
Returning values from functions You can return a value from a function by using the built- in function : ( return-from Function_name value) For example:
CSE S. Tanimoto Macros 1 Defining Macros in Lisp Extensibility: A language is extensible if the language can be extended. New Lisp control structures.
CSE S. Tanimoto Explicit Function Application 1 Explicit Application of Functions, Functional Arguments and Explicit Evaluation Implicit and explicit.
LISP 1.5 and beyond A very quick tour. Data Atoms (symbols) including numbers – All types of numbers including Roman! (well, in the early days) – Syntactically.
CSE 341, S. Tanimoto Concepts 1- 1 Programming Language Concepts Formal Syntax Paradigms Data Types Polymorphism.
CSE S. Tanimoto Lisp Lisp S-Expressions: ATOMs Every Lisp object is either an ATOM or a CONS Symbols and numbers are kinds of atoms: X, APPLE,
1 Lisp Functions –Built-in functions –Defining functions –Function Evaluation and Special Forms defun, if Control statements –Conditional if, cond –Repetition.
CSE S. Tanimoto Lambda Calculus 1 Lambda Calculus What is the simplest functional language that is still Turing complete? Where do functional languages.
CSE 341, S. Tanimoto Lisp Defining Functions with DEFUN Functions are the primary abstraction mechanism available in Lisp. (Others are structures.
Chapter 9: Functional Programming in a Typed Language.
Chapter Fifteen: Functional Programming Languages Lesson 12.
CSE S. Tanimoto Lisp Defining Macros in Lisp Extensibility: A language is extensible if the language can be extended. New Lisp control structures.
Lisp Functional Language or Applicative Language –Achieves its effect by applying functions, either recursively or through composition Powerful, expressive,
UMBC CMSC Common Lisp II. UMBC CMSC Input and Output Print is the most primitive output function > (print (list 'foo 'bar)) (FOO BAR) The.
CSE (c) S. Tanimoto, 2002 AI Techniques 1 Where and When Do Symbols Refer to Values and Functions? Scope and Extent of Bindings Bindings Scope Extent.
Milos Hauskrecht (PDF) Hieu D. Vu (PPT) LISP PROGARMMING LANGUAGE.
CSE S. Tanimoto More-Concepts - 1 More Programming Language Concepts Currying Lazy Evaluation Polymorphism.
CSE 341, S. Tanimoto Lisp LISP LISP = LISt Processing Intended for processing symbolic information Implementations from noncommercial sites: GNU.
CSE S. Tanimoto Lisps's Basic Functionality 1 LISP: Basic Functionality S-expressions Conses Lists Predicates Evaluation and quoting Conditional.
CSE 341, S. Tanimoto Lisp Explicit Application of Functions and Functional Arguments In Lisp, functions can be passed as arguments to other functions.
1 Topic #3: Lambda CSE 413, Autumn 2007 Programming Languages.
Artificial Intelligence and Lisp Lecture 6 LiU Course TDDC65 Autumn Semester,
Functional Programming
Unit – 3 :LAMBDA CALCULUS AND FUNCTIONAL PROGRAMMING
Section 15.4, 15.6 plus other materials
Lisp S-Expressions: ATOMs
Defining Macros in Lisp
Modern Programming Languages Lecture 20 Fakhar Lodhi
Data Structures in Lisp
The Environment Model*
FP Foundations, Scheme In Text: Chapter 14.
LISP LISP = LISt Processing
CS 36 – Chapter 11 Functional programming Features Practice
Scheme: Basic Functionality
Bindings, Scope, and Extent
CSE S. Tanimoto Introduction
Abstraction and Repetition
Modern Programming Languages Lecture 20 Fakhar Lodhi
CSE S. Tanimoto Explicit Function Application
CSE S. Tanimoto Introduction
Explicit Application of Procedures, and Explicit Evaluation
Streams and Lazy Evaluation in Lisp and Scheme
Lisp: Using Functions as Data
CSE S. Tanimoto Introduction
Functional Programming Concepts
Lisp: Representation of Data
Defining Macros in Lisp
Defining Functions with DEFUN
Peter Seibel Practical Common Lisp Peter Seibel
Abstraction and Repetition
Lisp: Using Functions as Data
Bindings, Scope, and Extent
LISP: Basic Functionality
CSE S. Tanimoto Lambda Calculus
Modern Programming Languages Lecture 18 Fakhar Lodhi
Functional Programming Concepts
LISP: Basic Functionality
Bindings, Scope, and Extent
Common Lisp II.
LISP: Basic Functionality
Lisp.
Defining Macros in Scheme
Lisp: Representation of Data
LISP primitives on sequences
Abstraction and Repetition
Presentation transcript:

Functional Programming Concepts Creating New Functions Composition Currying Lazy Evaluation Polymorphism CSE 341 -- S. Tanimoto Functional Programming

Composition and Currying in Functional Languages Q. How can two functions be combined to create a new function? A. By composition. h(x) = g(f(x)) Q. How can a function and one value be combined to create a new function? A. By currying. h(x) = f(a, x) h2(x, y) = f2(a, x, y) CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Composition in Lisp (defun compose-unary-fns (f g) #’(lambda (x) (funcall f (funcall g x))) ) (setq tripler #’(lambda (x) (* 3 x))) (setq squarer #’(lambda (x) (* x x))) (setq triple-squarer (compose-unary-fns tripler squarer) ) (funcall triple-squarer 5) => 75 CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Currying in Lisp (defun curry-binary-fn (f firstarg) #’(lambda (x) (funcall f firstarg x)) ) (setq cons-with-john (curry-binary-fn #’cons ’john) ) (funcall cons-with-john 21) => (21 . JOHN) CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Currying in Miranda Q. How does Miranda support currying? A. Any function that takes multiple arguments can be curried. mult x y = x * y triple = mult 3 Here mult is being curried with 3 producing a new function triple. Miranda defines a function of n arguments to be equivalent to a function of one argument that returns another function, that function taking n-1 arguments. CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Lazy Evaluation Q. What is lazy evaluation? A. It's a policy of only evaluating forms whose values are needed by a consumer, such as a print request. If Lisp fully supported lazy evaluation, then (FIRST (LIST 1 (+ 2 3) (* 4 5) (/ 6 7))) would not result in any arithmetic actually being performed, since only the element 1 needs to be returned. CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Lazy Evaluation - Lisp? Q. Does Lisp support lazy evaluation? A. Only in some limited ways... The special forms IF and COND, and the macros AND and OR perform lazy evaluation of their arguments. (or (= n 2) (= n 3) (= n 5) (= n 7) (= n 11) ‘not-a-small-prime) If n is 2, then only the first comparison is performed. CSE 341 -- S. Tanimoto Functional Programming

Lazy Evaluation - Efficiency? Q. Does lazy evaluation always lead to more efficient computation? A. No. Consider the Miranda code double x = x + x double 11*13 This evaluates as 11*13 + 11*13 = 143 + 143 = 186 But with applicative order evaluation we would have double 11*13 = double 143 = 143 + 143 = 186 which performs less arithmetic. Also, lazy evaluation usually incurs extra overhead. CSE 341 -- S. Tanimoto Functional Programming

Lazy Evaluation and Infinite Data Structures Q. Are there any other benefits of lazy evaluation? A. Yes, it permits creation and manipulation of "infinite" data structures. In Miranda, the list (1, 2, 3, ... ) is written [1..] and can be used in expressions. hd (tl (tl (map triple [1..]))) || returns 9 If you told Miranda to compute the length of [1..], however, it would loop indefinitely. CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Polymorphism Q. What is polymorphism? A. The property of a programming language feature or entity being able to support multiple types of data. Q. What is usually meant by function polymorphism? A. The ability for one function to accept arguments whose types can vary from one call to another. In Lisp, for example, CONS is polymorphic: (cons 1 2) ; numeric arguments (cons t nil) ; symbolic arguments Note: CONS is not overloaded; it's polymorphic. CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Polymorphism Q. Is there another way for a function to exhibit polymorphism? A. Yes, it can return different types of values. For example, the Lisp function given by (defun check-for-positive (n) (if (< n 0) 'negative n) ) may return either a number or a symbol, depending on the value of n. CSE 341 -- S. Tanimoto Functional Programming

Polymorphic Variables Q. What is a polymorphic variable? A. It’s a variable that can hold values of more than one type. In Lisp, symbols often serve as polymorphic variables: (setq x 5) (setq x ‘apple) (setq x ‘(peaches and pears)) CSE 341 -- S. Tanimoto Functional Programming

CSE 341 -- S. Tanimoto Functional Programming Polymorphism in Java Q. Does Java support polymorphism? A. Yes, via the use of the built-in, general class Object. public class Widget extends Object { private String name; public void setName(String n) {name = n;} } public Widget test(Widget w) { Widget w2 = (Widget) w.clone(); w2.setName(“The cloned Widget”); return w2; CSE 341 -- S. Tanimoto Functional Programming