SlideShare une entreprise Scribd logo
1  sur  6
ICS 313 - Fundamentals of Programming Languages 1
15. Functional Programming
15.1 Introduction
The design of the imperative languages is based
directly on the von Neumann architecture
Efficiency is the primary concern, rather than the
suitability of the language for software development
The design of the functional languages is based
on mathematical functions
A solid theoretical basis that is also closer to the user, but
relatively unconcerned with the architecture of the
machines on which programs will run
ICS 313 - Fundamentals of Programming Languages 2
15.2 Mathematical Functions
A mathematical function is a mapping of members of one set,
called the domain set, to another set, called the range set
A lambda expression specifies the parameter(s) and the
mapping of a function in the following form
λ(x) x * x * x
for the function cube (x) = x * x * x
Lambda expressions describe nameless functions
Lambda expressions are applied to parameter(s) by placing
the parameter(s) after the expression
e.g. (λ(x) x * x * x)(3)
which evaluates to 27
15.2 Mathematical Functions (continued)
Functional Forms
A higher-order function, or functional form, is one
that either takes functions as parameters or yields a
function as its result, or both
Function Composition
A functional form that takes two functions as parameters
and yields a function whose result is a function whose
value is the first actual parameter function applied to the
result of the application of the second
Form: h ≡ f ° g
which means h (x) ≡ f ( g ( x))
ICS 313 - Fundamentals of Programming Languages 3
15.2 Mathematical Functions (continued)
Construction
A functional form that takes a list of functions as parameters and yields
a list of the results of applying each of its parameter functions to a
given parameter
Form: [f, g]
For f (x) ≡ x * x * x and g (x) ≡ x + 3,
[f, g] (4) yields (64, 7)
Apply-to-all
A functional form that takes a single function as a parameter and
yields a list of values obtained by applying the given function to each
element of a list of parameters
Form: α
For h (x) ≡ x * x * x
α ( h, (3, 2, 4)) yields (27, 8, 64)
15.3 Fundamentals of Functional Programming Languages
The objective of the design of a FPL is to mimic mathematical
functions to the greatest extent possible
The basic process of computation is fundamentally different in
a FPL than in an imperative language
In an imperative language, operations are done and the results
are stored in variables for later use
Management of variables is a constant concern and source of complexity for
imperative programming
In an FPL, variables are not necessary, as is the case in
mathematics
In an FPL, the evaluation of a function always produces the
same result given the same parameters
This is called referential transparency
ICS 313 - Fundamentals of Programming Languages 4
Functional Programming Languages
LISP
Lambda notation is used to specify functions and function definitions, function
applications, and data all have the same form
Scheme
A mid-1970s dialect of LISP, designed to be a cleaner, more modern, and simpler
version than the contemporary dialects of LISP
COMMON LISP
A combination of many of the features of the popular dialects of LISP around in the
early 1980s
ML
A static-scoped functional language with syntax that is closer to Pascal than to LISP
Haskell
Similar to ML (syntax, static scoped, strongly typed, type inferencing)
Different from ML (and most other functional languages) in that it is PURELY
functional (e.g., no variables, no assignment statements, and no side effects of any
kind)
15.8 Haskell
Most Important Features
Uses lazy evaluation (evaluate no subexpression until the value
is needed)
Has “list comprehensions,” which allow it to deal with infinite
lists
Examples
Fibonacci numbers (illustrates function definitions with different
parameter forms)
fib 0 = 1
fib 1 = 1
fib (n + 2) = fib (n + 1) + fib n
ICS 313 - Fundamentals of Programming Languages 5
15.8 Haskell (continued)
Factorial (illustrates guards)
fact n
| n == 0 = 1
| n > 0 = n * fact (n - 1)
The special word otherwise can appear as a guard
List operations
List notation: Put elements in brackets
e.g., directions = [north, south, east, west]
Length: #
e.g., #directions is 4
Arithmetic series with the .. operator
e.g., [2, 4..10] is [2, 4, 6, 8, 10]
Catenation is with ++
e.g., [1, 3] ++ [5, 7] results in [1, 3, 5, 7]
CAR and CDR via the colon operator (as in Prolog)
e.g., 1:[3, 5, 7] results in [1, 3, 5, 7]
15.8 Haskell (continued)
Examples:
product [] = 1
product (a:x) = a * product x
fact n = product [1..n]
List comprehensions: set notation
e.g.,
[n * n | n ← [1..20]]
defines a list of the squares of the first 20 positive integers
factors n = [i | i [1..n div 2],n mod i == 0]
This function computes all of the factors of its given parameter
Quicksort:
sort [] = []
sort (a:x) = sort [b | b ← x; b <= a]
++ [a] ++
sort [b | b ← x; b > a]
ICS 313 - Fundamentals of Programming Languages 6
15.8 Haskell (continued)
Lazy evaluation
Infinite lists
e.g.,
positives = [0..]
squares = [n * n | n ← [0..]]
(only compute those that are necessary)
e.g.,
member squares 16
would return True
The member function could be written as:
member [] b = False
member (a:x) b = (a == b) || member x b
However, this would only work if the parameter to squares was
a perfect square; if not, it will keep generating them forever.
The following version will always work:
member2 (m:x) n
| m < n = member2 x n
| m == n = True
| otherwise = False
15.8 Haskell (continued)
Applications of Functional Languages:
LISP is used for artificial intelligence
Knowledge representation
Machine learning
Natural language processing
Modeling of speech and vision
Scheme is used to teach introductory programming at a significant
number of universities
Comparing Functional and Imperative Languages
Imperative Languages:
Efficient execution
Complex semantics
Complex syntax
Concurrency is programmer designed
Functional Languages:
Simple semantics
Simple syntax
Inefficient execution
Programs can automatically be made concurrent

Contenu connexe

Tendances

Matlab practical and lab session
Matlab practical and lab sessionMatlab practical and lab session
Matlab practical and lab session
Dr. Krishna Mohbey
 
Introduction to MatLab programming
Introduction to MatLab programmingIntroduction to MatLab programming
Introduction to MatLab programming
Damian T. Gordon
 
MATLAB BASICS
MATLAB BASICSMATLAB BASICS
MATLAB BASICS
butest
 

Tendances (20)

Basic operators in matlab
Basic operators in matlabBasic operators in matlab
Basic operators in matlab
 
Introduction to matlab lecture 1 of 4
Introduction to matlab lecture 1 of 4Introduction to matlab lecture 1 of 4
Introduction to matlab lecture 1 of 4
 
Matlab from Beginner to Expert
Matlab from Beginner to ExpertMatlab from Beginner to Expert
Matlab from Beginner to Expert
 
Matlab Workshop Presentation
Matlab Workshop PresentationMatlab Workshop Presentation
Matlab Workshop Presentation
 
Introduction to Matlab
Introduction to MatlabIntroduction to Matlab
Introduction to Matlab
 
Matlab practical and lab session
Matlab practical and lab sessionMatlab practical and lab session
Matlab practical and lab session
 
Matlab intro
Matlab introMatlab intro
Matlab intro
 
Introduction to MatLab programming
Introduction to MatLab programmingIntroduction to MatLab programming
Introduction to MatLab programming
 
Matlab Overviiew
Matlab OverviiewMatlab Overviiew
Matlab Overviiew
 
MATLAB BASICS
MATLAB BASICSMATLAB BASICS
MATLAB BASICS
 
MATLAB - The Need to Know Basics
MATLAB - The Need to Know BasicsMATLAB - The Need to Know Basics
MATLAB - The Need to Know Basics
 
Intro to Matlab programming
Intro to Matlab programmingIntro to Matlab programming
Intro to Matlab programming
 
Matlab 1(operations on_matrix)
Matlab 1(operations on_matrix)Matlab 1(operations on_matrix)
Matlab 1(operations on_matrix)
 
Ppt 2 d ploting k10998
Ppt 2 d ploting k10998Ppt 2 d ploting k10998
Ppt 2 d ploting k10998
 
All About MATLAB
All About MATLABAll About MATLAB
All About MATLAB
 
Introduction to MATLAB
Introduction to MATLABIntroduction to MATLAB
Introduction to MATLAB
 
Matlab solved problems
Matlab solved problemsMatlab solved problems
Matlab solved problems
 
Matlab intro
Matlab introMatlab intro
Matlab intro
 
Matlab basic and image
Matlab basic and imageMatlab basic and image
Matlab basic and image
 
Introduction to matlab
Introduction to matlabIntroduction to matlab
Introduction to matlab
 

En vedette

6 data types
6 data types6 data types
6 data types
jigeno
 
Access2007 m2
Access2007 m2Access2007 m2
Access2007 m2
jigeno
 
14 exception handling
14 exception handling14 exception handling
14 exception handling
jigeno
 
15 functional programming
15 functional programming15 functional programming
15 functional programming
jigeno
 
8 statement-level control structure
8 statement-level control structure8 statement-level control structure
8 statement-level control structure
jigeno
 
12 object oriented programming
12 object oriented programming12 object oriented programming
12 object oriented programming
jigeno
 
7 expressions and assignment statements
7 expressions and assignment statements7 expressions and assignment statements
7 expressions and assignment statements
jigeno
 
1 preliminaries
1 preliminaries1 preliminaries
1 preliminaries
jigeno
 
4 lexical and syntax analysis
4 lexical and syntax analysis4 lexical and syntax analysis
4 lexical and syntax analysis
jigeno
 

En vedette (9)

6 data types
6 data types6 data types
6 data types
 
Access2007 m2
Access2007 m2Access2007 m2
Access2007 m2
 
14 exception handling
14 exception handling14 exception handling
14 exception handling
 
15 functional programming
15 functional programming15 functional programming
15 functional programming
 
8 statement-level control structure
8 statement-level control structure8 statement-level control structure
8 statement-level control structure
 
12 object oriented programming
12 object oriented programming12 object oriented programming
12 object oriented programming
 
7 expressions and assignment statements
7 expressions and assignment statements7 expressions and assignment statements
7 expressions and assignment statements
 
1 preliminaries
1 preliminaries1 preliminaries
1 preliminaries
 
4 lexical and syntax analysis
4 lexical and syntax analysis4 lexical and syntax analysis
4 lexical and syntax analysis
 

Similaire à 15 functional programming

Programming Languages - Functional Programming Paper
Programming Languages - Functional Programming PaperProgramming Languages - Functional Programming Paper
Programming Languages - Functional Programming Paper
Shreya Chakrabarti
 

Similaire à 15 functional programming (20)

LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
 
LISP: Introduction To Lisp
LISP: Introduction To LispLISP: Introduction To Lisp
LISP: Introduction To Lisp
 
Inroduction to r
Inroduction to rInroduction to r
Inroduction to r
 
Using Language Oriented Programming to Execute Computations on the GPU
Using Language Oriented Programming to Execute Computations on the GPUUsing Language Oriented Programming to Execute Computations on the GPU
Using Language Oriented Programming to Execute Computations on the GPU
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Introduction to R for beginners
Introduction to R for beginnersIntroduction to R for beginners
Introduction to R for beginners
 
Functions.docx
Functions.docxFunctions.docx
Functions.docx
 
1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx1. Ch_1 SL_1_Intro to Matlab.pptx
1. Ch_1 SL_1_Intro to Matlab.pptx
 
Python programming: Anonymous functions, String operations
Python programming: Anonymous functions, String operationsPython programming: Anonymous functions, String operations
Python programming: Anonymous functions, String operations
 
Functional Programming Languages slidesslies.ppt
Functional Programming Languages slidesslies.pptFunctional Programming Languages slidesslies.ppt
Functional Programming Languages slidesslies.ppt
 
Functions in advanced programming
Functions in advanced programmingFunctions in advanced programming
Functions in advanced programming
 
Automatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSELAutomatic Task-based Code Generation for High Performance DSEL
Automatic Task-based Code Generation for High Performance DSEL
 
User defined functions in matlab
User defined functions in  matlabUser defined functions in  matlab
User defined functions in matlab
 
Matlab Manual
Matlab ManualMatlab Manual
Matlab Manual
 
R basics
R basicsR basics
R basics
 
Programming Languages - Functional Programming Paper
Programming Languages - Functional Programming PaperProgramming Languages - Functional Programming Paper
Programming Languages - Functional Programming Paper
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Advance python programming
Advance python programming Advance python programming
Advance python programming
 
Introduction to haskell
Introduction to haskellIntroduction to haskell
Introduction to haskell
 

Plus de jigeno

Basic introduction to ms access
Basic introduction to ms accessBasic introduction to ms access
Basic introduction to ms access
jigeno
 
16 logical programming
16 logical programming16 logical programming
16 logical programming
jigeno
 
13 concurrency
13 concurrency13 concurrency
13 concurrency
jigeno
 
11 abstract data types
11 abstract data types11 abstract data types
11 abstract data types
jigeno
 
9 subprograms
9 subprograms9 subprograms
9 subprograms
jigeno
 
5 names
5 names5 names
5 names
jigeno
 
3 describing syntax and semantics
3 describing syntax and semantics3 describing syntax and semantics
3 describing syntax and semantics
jigeno
 
2 evolution of the major programming languages
2 evolution of the major programming languages2 evolution of the major programming languages
2 evolution of the major programming languages
jigeno
 
Access2007 m1
Access2007 m1Access2007 m1
Access2007 m1
jigeno
 

Plus de jigeno (11)

Access2007 part1
Access2007 part1Access2007 part1
Access2007 part1
 
Basic introduction to ms access
Basic introduction to ms accessBasic introduction to ms access
Basic introduction to ms access
 
Bsit1
Bsit1Bsit1
Bsit1
 
16 logical programming
16 logical programming16 logical programming
16 logical programming
 
13 concurrency
13 concurrency13 concurrency
13 concurrency
 
11 abstract data types
11 abstract data types11 abstract data types
11 abstract data types
 
9 subprograms
9 subprograms9 subprograms
9 subprograms
 
5 names
5 names5 names
5 names
 
3 describing syntax and semantics
3 describing syntax and semantics3 describing syntax and semantics
3 describing syntax and semantics
 
2 evolution of the major programming languages
2 evolution of the major programming languages2 evolution of the major programming languages
2 evolution of the major programming languages
 
Access2007 m1
Access2007 m1Access2007 m1
Access2007 m1
 

Dernier

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

15 functional programming

  • 1. ICS 313 - Fundamentals of Programming Languages 1 15. Functional Programming 15.1 Introduction The design of the imperative languages is based directly on the von Neumann architecture Efficiency is the primary concern, rather than the suitability of the language for software development The design of the functional languages is based on mathematical functions A solid theoretical basis that is also closer to the user, but relatively unconcerned with the architecture of the machines on which programs will run
  • 2. ICS 313 - Fundamentals of Programming Languages 2 15.2 Mathematical Functions A mathematical function is a mapping of members of one set, called the domain set, to another set, called the range set A lambda expression specifies the parameter(s) and the mapping of a function in the following form λ(x) x * x * x for the function cube (x) = x * x * x Lambda expressions describe nameless functions Lambda expressions are applied to parameter(s) by placing the parameter(s) after the expression e.g. (λ(x) x * x * x)(3) which evaluates to 27 15.2 Mathematical Functions (continued) Functional Forms A higher-order function, or functional form, is one that either takes functions as parameters or yields a function as its result, or both Function Composition A functional form that takes two functions as parameters and yields a function whose result is a function whose value is the first actual parameter function applied to the result of the application of the second Form: h ≡ f ° g which means h (x) ≡ f ( g ( x))
  • 3. ICS 313 - Fundamentals of Programming Languages 3 15.2 Mathematical Functions (continued) Construction A functional form that takes a list of functions as parameters and yields a list of the results of applying each of its parameter functions to a given parameter Form: [f, g] For f (x) ≡ x * x * x and g (x) ≡ x + 3, [f, g] (4) yields (64, 7) Apply-to-all A functional form that takes a single function as a parameter and yields a list of values obtained by applying the given function to each element of a list of parameters Form: α For h (x) ≡ x * x * x α ( h, (3, 2, 4)) yields (27, 8, 64) 15.3 Fundamentals of Functional Programming Languages The objective of the design of a FPL is to mimic mathematical functions to the greatest extent possible The basic process of computation is fundamentally different in a FPL than in an imperative language In an imperative language, operations are done and the results are stored in variables for later use Management of variables is a constant concern and source of complexity for imperative programming In an FPL, variables are not necessary, as is the case in mathematics In an FPL, the evaluation of a function always produces the same result given the same parameters This is called referential transparency
  • 4. ICS 313 - Fundamentals of Programming Languages 4 Functional Programming Languages LISP Lambda notation is used to specify functions and function definitions, function applications, and data all have the same form Scheme A mid-1970s dialect of LISP, designed to be a cleaner, more modern, and simpler version than the contemporary dialects of LISP COMMON LISP A combination of many of the features of the popular dialects of LISP around in the early 1980s ML A static-scoped functional language with syntax that is closer to Pascal than to LISP Haskell Similar to ML (syntax, static scoped, strongly typed, type inferencing) Different from ML (and most other functional languages) in that it is PURELY functional (e.g., no variables, no assignment statements, and no side effects of any kind) 15.8 Haskell Most Important Features Uses lazy evaluation (evaluate no subexpression until the value is needed) Has “list comprehensions,” which allow it to deal with infinite lists Examples Fibonacci numbers (illustrates function definitions with different parameter forms) fib 0 = 1 fib 1 = 1 fib (n + 2) = fib (n + 1) + fib n
  • 5. ICS 313 - Fundamentals of Programming Languages 5 15.8 Haskell (continued) Factorial (illustrates guards) fact n | n == 0 = 1 | n > 0 = n * fact (n - 1) The special word otherwise can appear as a guard List operations List notation: Put elements in brackets e.g., directions = [north, south, east, west] Length: # e.g., #directions is 4 Arithmetic series with the .. operator e.g., [2, 4..10] is [2, 4, 6, 8, 10] Catenation is with ++ e.g., [1, 3] ++ [5, 7] results in [1, 3, 5, 7] CAR and CDR via the colon operator (as in Prolog) e.g., 1:[3, 5, 7] results in [1, 3, 5, 7] 15.8 Haskell (continued) Examples: product [] = 1 product (a:x) = a * product x fact n = product [1..n] List comprehensions: set notation e.g., [n * n | n ← [1..20]] defines a list of the squares of the first 20 positive integers factors n = [i | i [1..n div 2],n mod i == 0] This function computes all of the factors of its given parameter Quicksort: sort [] = [] sort (a:x) = sort [b | b ← x; b <= a] ++ [a] ++ sort [b | b ← x; b > a]
  • 6. ICS 313 - Fundamentals of Programming Languages 6 15.8 Haskell (continued) Lazy evaluation Infinite lists e.g., positives = [0..] squares = [n * n | n ← [0..]] (only compute those that are necessary) e.g., member squares 16 would return True The member function could be written as: member [] b = False member (a:x) b = (a == b) || member x b However, this would only work if the parameter to squares was a perfect square; if not, it will keep generating them forever. The following version will always work: member2 (m:x) n | m < n = member2 x n | m == n = True | otherwise = False 15.8 Haskell (continued) Applications of Functional Languages: LISP is used for artificial intelligence Knowledge representation Machine learning Natural language processing Modeling of speech and vision Scheme is used to teach introductory programming at a significant number of universities Comparing Functional and Imperative Languages Imperative Languages: Efficient execution Complex semantics Complex syntax Concurrency is programmer designed Functional Languages: Simple semantics Simple syntax Inefficient execution Programs can automatically be made concurrent