0% found this document useful (0 votes)
43 views39 pages

Unit 4 App

Uploaded by

td4520
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views39 pages

Unit 4 App

Uploaded by

td4520
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 39

lOMoARcPSD|25444167

UNIT 4 APP - ...................

Advanced Programming Practice (SRM Institute of Science and Technology)

Studocu is not sponsored or endorsed by any college or university


Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

SRM Institute of Science and Technology


School of Computing

Advanced Programming Practice-18CSC207J

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Paradigm types
Unit IV
– Functional Programming Paradigm [Text Book :1]
– Logic Programming Paradigm [Text Book : 1& 3]
– Dependent Type Programming Paradigm
– Network Programming Paradigm [ Text Book :4]

Text Book:

1. Elad Shalom, A Review of Programming Paradigms throughout the History: With


a suggestion Toward a Future Approach, Kindle Edition, 2018
2. John Goerzen, Brandon Rhodes, Foundations of Python Network Programming:
The comprehensive guide to building network applications with Python, 2nd ed.,
Kindle Edition, 2010
3. Amit Saha, Doing Math with Python: Use Programming to Explore Algebra,
Statistics,Calculus and More, Kindle Edition, 2015
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Functional Programming Paradigm


Unit-III (15 Session)
Session 11-15 cover the following topics:-
– Definition - S11-SLO1
– Sequence of Commands – S11-SLO2
– map(), reduce(), filter(), lambda – S12-SLO1
– partial, functools – S12-SLO2
– Other languages:F#, Clojure, Haskell – S13-SLO1
– Demo: Functional Programming in Python - S13-SLO2

Lab 9: Functional Programming ( Case Study) (S14-15)

Assignment : Comparative study of Functional programming in


F#, Clojure, Haskell

– TextBook: Shalom, Elad. A Review of Programming Paradigms


Throughout the History: With a Suggestion Toward a Future
Approach, Kindle Edition
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Functional Programming Paradigm ( TF1)

Definition
• Mainly treat computation to evaluate mathematical Functions
• Avoids changing-state and mutable data
• Called as declarative programming paradigm
• Output depends on argument passing
• Calling same function several times with same values produces
same result
• Uses expressions or declarations rather than statements as in
imperative languages

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Characteristics of Functional Programming

• Functional programming method focuses on results, not the


process
• Emphasis is on what is to be computed
• Data is immutable
• Functional programming Decompose the problem into
'functions
• It is built on the concept of mathematical functions which
uses conditional expressions and recursion to do perform the
calculation
• It does not support iteration like loop statements and
conditional statements like If-Else

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

History
• The foundation for Functional Programming is Lambda Calculus.
It was developed in the 1930s for the functional application,
definition, and recursion
• LISP was the first functional programming language. McCarthy
designed it in 1960
• In the late 70's researchers at the University of Edinburgh defined
the ML(Meta Language)
• In the early 80's Hope language adds algebraic data types for
recursion and equational reasoning
• In the year 2004 Innovation of Functional language 'Scala.'

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Real Time applications

• Database processing
• Financial modeling
• Statistical analysis and
• Bio-informatics

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Functional Programming Languages

• Haskell
• SML
• Clojure
• Scala
• Erlang
• Clean
• F#
• ML/OCaml Lisp / Scheme
• XSLT
• SQL
• Mathematica

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Basic Functional Programming Terminology and Concepts

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Functional Vs Procedural
S.No Functional Paradigms Procedural Paradigm

1 Treats computation as the evaluation Derived from structured programming,


of mathematical based on the concept of modular
functions avoiding state and mutable data programming or the procedure call

2 Main traits are Lambda Main traits are Local variables, sequence,
calculus, compositionality, formula, recursio selection, iteration, and modularization
n, referential transparency
3 Functional programming focuses Procedural programming focuses
on expressions on statements
4 Often recursive.Always returns the same The output of a routine does not always
output for a given input. have a direct correlation with the input.

5 Order of evaluation is usually undefined. Everything is done in a specific order.

6 Must be stateless. i.e. No operation can have Execution of a routine may have side
side effects. effects.
7 Good fit for parallel execution, Tends to Tends to emphasize implementing
emphasize a divide and conquer approach. solutions in a linear fashion.
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Functional Vs Object-oriented Programming


S.No Functional Paradigms Object Oriented Paradigm

1 FP uses Immutable data. OOP uses Mutable data.

2 Follows Declarative Programming based Follows Imperative Programming


Model. Model.
3 What it focuses is on: "What you are doing. in What it focuses is on "How you are
the programme." doing your programming."
4 Supports Parallel Programming. No supports for Parallel Programming.
5 Its functions have no-side effects. Method can produce many side effects.
6 Flow Control is performed using function calls Flow control process is conducted using
& function calls with recursion. loops and conditional statements.
7 Execution order of statements is not very Execution order of statements is
important. important.

8 Supports both "Abstraction over Data" and Supports only "Abstraction over Data".
"Abstraction over Behavior."

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Example
Functional Programming Procedural Programming

num = 1 num = 1
def function_to_add_one(num): def procedure_to_add_one():
num += 1 global num
return num num += 1
function_to_add_one(num) return num
function_to_add_one(num) procedure_to_add_one()
function_to_add_one(num) procedure_to_add_one()
function_to_add_one(num) procedure_to_add_one()
function_to_add_one(num) procedure_to_add_one()
procedure_to_add_one()
#Final Output: 2
#Final Output: 6
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Features of Functional paradigms

• First-class functions – accept another function as an argument


or return a function
• Pure functions - they are functions without side effects
• Recursion - allows writing smaller algorithms and operating by
looking only at the inputs to a function
• Immutable variables - variables that cannot be changed
• Non-strict evaluation - allows having variables that have not
yet been computed
• Statements - evaluable pieces of code that have a return value
• Pattern matching - allows better type-checking and extracting
elements from an object

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Pure Functions:

• Pure Functions:
• These functions have two main properties.
First, they always produce the same output
for the same arguments irrespective of
anything else.
• Secondly, they have no side-effects i.e. they
do modify any argument or global variables
or output something.

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Example
def multiply_2_pure(numbers):
new_numbers = []
for n in numbers:
new_numbers.append(n * 2)
return new_numbers

original_numbers = [1, 3, 5, 10]


changed_numbers =
multiply_2_pure(original_numbers)
print(original_numbers) # [1, 3, 5, 10]
print(changed_numbers) # [2, 6, 10, 20]

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

RECURSION
• During functional programming, there is no
concept of for loop or while loop, instead
recursion is used. Recursion is a process in
which a function calls itself directly or
indirectly

Downloaded by Tushar Dineshprabhu ([email protected])


Functions are First-Class and can be
lOMoARcPSD|25444167

Higher-Order
• they may be stored in data structures, passed
as arguments, or used in control structures.
• A programming language is said to support
first-class functions if it treats functions as
first-class objects.

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

PROPERTIES OF FIRST CLASS


FUNCTIONS
• A function is an instance of the Object type.
• You can store the function in a variable.
• You can pass the function as a parameter to
another function.
• You can return the function from a function.
• You can store them in data structures such as
hash tables, lists, …

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Anonymous Functions

• Anonymous (lambda) functions can be very convenient


for functional programming constructs.
• They don’t have names and usually are created ad-hoc,
with a single purpose.
• Exp1: lambda x, y: x + y
• Exp 2: >>> f = lambda x, y: x + y
>>> def g(x, y):
return x + y

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Examples
Anonymous function assigned to a variable. Easy to pass around and
invoke when needed.
const myVar = function(){console.log(‘Anonymous function here!’)}
myVar()
Anonymous function as argument
• setInterval(function(){console.log(new Date().getTime())}, 1000);
Anonymous functions within a higher order function
function mealCall(meal){
return function(message){
return console.log(message + “ “ + meal + ‘!!’) }
}
const announceDinner = mealCall(‘dinner’)
const announceLunch = mealCall(‘breakfast’)
announceDinner(‘hey!, come and get your’)
announceLunch(‘Rise and shine! time for’)
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Mathematical Background

• For example, if f(x)=x2and x is 3, the ordered pair is (-3,


9).
• A function is defined by its set of inputs, called the
domain.
• A set containing the set of outputs, and possibly
additional elements as members, is called its codomain.
• The set of all input-output pairs is called its graph.

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Mathematical Background

General Concepts Functional Rules


• Notation
F(x) = y
x , y -> Arguments or 1. (f+g)(x)=f(x)+g(x)
parameters 2. (f-g)(x)=f(x)-g(x)
x -> domain and
3. (f*g)(x)=f(x)*g(x)
y->codomain
Types: 4. (f/g)(x)=f(x)/g(x)
– Injective if f(a) ≠ f(b) 5. (gof)(x)=g(f(x))
– Surjective if f(X)= Y 6. f f-1=idy
– Bijective ( support both)

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Example using Python


• Anonymous functions are split into two types: lambda functions and closures.
• Functions are made of four parts: name, parameter list, body, and return

Example :
A=5
def impure_sum(b):
return b + A
def pure_sum(a, b):
return a + b
print(impure_sum(6))
>> 11
print(pure_sum(4, 6))
>> 10

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Example Code

Functional style of getting a sum of a list:


Function for computing the
average of two numbers:
new_lst = [1, 2, 3, 4]
def sum_list(lst):
(defun avg(X Y) (/ (+ X Y) if len(lst) == 1:
return lst[0]
2.0)) else:
return lst[0] + sum_list(lst[1:])
print(sum_list(new_lst))
Function is called by:
# or the pure functional way in python using
> (avg 10.0 20.0) higher order function
Function returns: import functools
15.0 print(functools.reduce(lambda x, y: x + y,
new_lst))

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Immutable variables

• Immutable variable (object) is a variable whose state


cannot be modified once it is created.
• In contrast, a mutable variable can be modified after
it is created
• Exp
• String str = “A Simple String.”;
• str.toLowerCase();

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Other Examples

• int i = 12; //int is a primitive type


• i = 30; //this is ok
• final int j = 12;
• j = 30;
• final MyClass c = new MyClass();
• m.field = 100; //this is ok;
• m = new MyClass();

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Scenario1

• What if we wanted to def hof_write_repeat(message, n, action):


write to a file 5 times, for i in range(n):
or log the message 5 action(message)
times? Instead of
writing 3 different hof_write_repeat('Hello', 5, print)
functions that all loop,
we can write 1 Higher
# Import the logging library
Order Function that
import logging
accepts those
# Log the output as an error instead
functions as an
argument: hof_write_repeat('Hello', 5, logging.error)

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Scenario2
def hof_add(increment):
# Create a function that loops and adds
the increment
• Imagine that we're def add_increment(numbers):
tasked with creating new_numbers = []
functions that for n in numbers:
new_numbers.append(n +
increment numbers increment)
in a list by 2, 5, and return new_numbers
10. So instead of # We return the function as we do any
creating many other value
return add_increment
different increment add2=hof_add(2)
functions, we create print(add2([23, 88])) # [25, 90]
1 Higher Order add5 = hof_add(5)
Function: print(add5([23, 88])) # [28, 93]
add10 = hof_add(10)
print(add10([23, 88])) # [33, 98]
Downloaded by Tushar Dineshprabhu ([email protected])
lOMoARcPSD|25444167

Functional programming tools

• filter(function, sequence)
def f(x): return x%2 != 0 and x%3 ==0
filter(f, range(2,25))
• map(function, sequence)
– call function for each item
– return list of return values
• reduce(function, sequence)
– return a single value
– call binary function on the first two items
– then on the result and next item
– iterate

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Lambda Expression
# Using `def` (old way).
def old_add(a, b):
return a + b

# Using `lambda` (new way).


new_add = lambda a, b: a + b old_add(10, 5) == new_add(10, 5)
>> True

unsorted = [('b', 6), ('a', 10), ('d', 0), ('c', 4)]


print(sorted(unsorted, key=lambda x: x[1]))
>> [('d', 0), ('c', 4), ('b', 6), ('a', 10)]

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Map Function
• Takes in an iterable (ie. list), and creates a new iterable object, a
special map object.
• The new object has the first-class function applied to every element.

# Pseudocode for map. Example:

values = [1, 2, 3, 4, 5]
def map(func, seq):
add_10 = list(map(lambda x: x + 10,
return Map( values))
func(x) add_20 = list(map(lambda x: x + 20,
values))
for x in seq
print(add_10)
) >> [11, 12, 13, 14, 15]

print(add_20)
>> [21, 22, 23, 24, 25]

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Filter Function
• Takes in an iterable (ie. list), and creates a new iterable object
• The new object has the first-class function applied to every element.

# Pseudocode for map. Example:

return Map( even = list(filter(lambda x: x % 2 == 0, values))


odd = list(filter(lambda x: x % 2 == 1, values))
x for x in seq
if evaluate(x) is True print(even)
) >> [2, 4, 6, 8, 10]

print(odd)
>> [1, 3, 5, 7, 9]

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Advantages

• Allows you to avoid confusing problems and errors in the code


• Easier to test and execute Unit testing and debug FP Code.
• Parallel processing and concurrency
• Hot code deployment and fault tolerance
• Offers better modularity with a shorter code
• Increased productivity of the developer
• Supports Nested Functions
• Functional Constructs like Lazy Map & Lists, etc.
• Allows effective use of Lambda Calculus

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Disadvantages

• Perhaps less efficiency


• Problems involving many variables or a lot of sequential
activity are sometimes easier to handle imperatively
• Functional programming paradigm is not easy, so it is
difficult to understand for the beginner
• Hard to maintain as many objects evolve during the
coding
• Needs lots of mocking and extensive environmental setup
• Re-use is very complicated and needs constantly
refactoring
• Objects may not represent the problem correctly

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Transforming code from imperative to functional

1. Introduce higher-order functions.


2. Convert existing methods into pure functions.
3. Convert loops over to recursive/tail-recursive
methods (if possible).
4. Convert mutable variables into immutable
variables.
5. Use pattern matching (if possible).

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Sample Scenario
1) (The MyTriangle module) Create a module named MyTriangle that contains the
following two functions:
# Returns true if the sum of any two sides is greater than the third side.
def isValid(side1, side2, side3):
# Returns the area of the triangle.
def area(side1, side2, side3):
Write a test program that reads three sides for a triangle and computes the area if the
input is valid. Otherwise, it displays that the input is invalid.

2) A prime number is called a Mersenne prime if it can be written in the form for some
positive integer p. Write a program that finds all Mersenne primes with and displays the
output as follows:
p 2^p - 1
2 3
3 7
5 31

Downloaded by Tushar Dineshprabhu ([email protected])


36
lOMoARcPSD|25444167

Sample Scenarios

3) Write a function named ack that evaluates the Ackermann


function. Use your function to evaluate ack(3, 4), which should be
125.

Downloaded by Tushar Dineshprabhu ([email protected])


lOMoARcPSD|25444167

Thank you

Downloaded by Tushar Dineshprabhu ([email protected])

You might also like