Functional programming
-
Upload
edusmildo -
Category
Technology
-
view
637 -
download
2
description
Transcript of Functional programming
FUNCTIONAL PROGRAMMING
REFERENCES:1. PROGRAMMING LANGUAGES: PRINCIPLES AND PRACTICES. K. C. LAUDEN, SECOND EDITION
2. PROGRAMMING LANGUAGE PRAGMATICS. M. L. SCOTT
AUGUST 31, 2011
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING
REASONS TO STUDY FP:
RECURSION
ABSTRACTION
HIGHER-ORDER FUNCTIONS
> IMPACT MOST PROGRAMMING LANGUAGES
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONS
PROGRAM ≡ DESCRIPTION OF A SPECIFIC COMPUTATION
Y = F(X)F : X ➝ Y
IN MATHEMATICS: *VARIABLES ≡ ACTUAL VALUES*NO MEMORY LOCATION CONCEPT.
IN IMPERATIVE LANGUAGES:
*VARIABLES ≡ MEMORY LOCATIONS + VALUES
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONS
PROGRAM ≡ DESCRIPTION OF A SPECIFIC COMPUTATION
Y = F(X)F : X ➝ Y
IN MATHEMATICS: *VARIABLES ≡ ACTUAL VALUES*NO MEMORY LOCATION CONCEPT.
IN IMPERATIVE LANGUAGES:
*VARIABLES ≡ MEMORY LOCATIONS + VALUES
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONS
CONSEQUENCES OF NO ASSIGNMENT OPERATION:
*NO LOOPS
*INSTEAD: RECURSION.
IN FUNCTIONAL PROGRAMMING (PURE FUNCTIONAL PROGRAMMING):
*NO VARIABLE> EXCEPT AS A NAME FOR A VALUE
*NO ASSIGNMENT OPERATION> X = X + 1 DOES NOT MAKE ANY SENSE IN MATH!
*ONLY CONSTANTS, PARAMETERS, AND VALUES.
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONS
VOID GCD ( INT U, INT V, INT * X ){
INT Y, T, Z;Z = U;Y = V;WHILE( Y != 0 ){
T = Y;Y = Z % Y;Z = T;
}*X = Z;
}
EXAMPLE: ITERATIONS VS RECURSION
INT GCD ( INT U, INT V ){
IF ( V== 0 )RETURN U;
ELSERETURN GCD(V, U % V);
}
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONSCONSEQUENCES OF NO VARIABLES AND NO ASSIGNMENT OPERATION:
*NO NOTION OF THE INTERNAL STATE OF A FUNCTION
*THE VALUE OF ANY FUNCTION CANNOT DEPEND ON THE ORDER OF EVALUATION OF ITS ARGUMENTS
>REFERENTIAL TRANSPARENCY
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONSCONSEQUENCES OF NO VARIABLES AND NO ASSIGNMENT OPERATION:
*NO NOTION OF THE INTERNAL STATE OF A FUNCTION
*THE VALUE OF ANY FUNCTION CANNOT DEPEND ON THE ORDER OF EVALUATION OF ITS ARGUMENTS
>REFERENTIAL TRANSPARENCY
*THE RUNTIME ENVIRONMENT ASSOCIATES NAMES TO VALUES ONLY; ONCE A NAME ENTERS THE ENVIRONMENT IT NEVER CHANGES
>VALUE SEMANTICS
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONSIN FUNCTIONAL PROGRAMMING:
*FUNCTIONS MUST BE GENERAL LANGUAGE OBJECTS
> FIRST-CLASS VALUES
*FUNCTIONS ≡ VALUES ⇒ CAN BE COMPUTED BY OTHER FUNCTIONS ⇒ WHICH CAN BE PARAMETERS TO FUNCTIONS.
*FUNCTIONS CAN HAVE OTHER FUNCTIONS AS INPUT OR OUTPUT OR BOTH AS PARAMETERS
> HIGHER-ORDER FUNCTIONS
Thursday, September 8, 2011
PROGRAMS AS FUNCTIONSSUMMARY:
1. ALL PROCEDURES ARE FUNCTIONS AND CLEARLY DISTINGUISH INCOMING VALUES (PARAMETERS) FROM OUTGOING VALUES (RESULTS).
2. THERE ARE NO VARIABLES OR ASSIGNMENTS - VARIABLES ARE REPLACED BY PARAMETERS.
3. THERE ARE NO LOOPS - LOOPS ARE REPLACED BY RECURSIVE CALLS.
4. THE VALUE OF A FUNCTION DEPENDS ONLY ON THE VALUE OF ITS INPUT PARAMETERS AND NOT ON THE ORDER OF EVALUATION OR THE EXECUTION PATH THAT LED TO THE CALL.
5. FUNCTIONS ARE FIRST-CLASS VALUES.
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGE
BASIC REQUIREMENT:
1. AVAILABILITY OF RECURSION
2. MECHANISM FOR IMPLEMENTING GENERAL FUNCTIONS
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGEEXAMPLE:
CONSIDER A FUNCTION THAT RETURNS THE SUM OF THE INTEGERS BETWEEN I AND J:
SUM(I, J) = I + (I + 1) + (I + 2) + ... + (J - 1) + J
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGEEXAMPLE:
CONSIDER A FUNCTION THAT RETURNS THE SUM OF THE INTEGERS BETWEEN I AND J:
SUM(I, J) = I + (I + 1) + (I + 2) + ... + (J - 1) + J
INT SUM ( INT I, INT J ){
INT K, TEMP;TEMP = 0;FOR( K = I; K <= J; K++ )
TEMP += K;RETURN TEMP;
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGEEXAMPLE:
CONSIDER A FUNCTION THAT RETURNS THE SUM OF THE INTEGERS BETWEEN I AND J:
SUM(I, J) = I + (I + 1) + (I + 2) + ... + (J - 1) + J
INT SUM ( INT I, INT J ){
INT K, TEMP;TEMP = 0;FOR( K = I; K <= J; K++ )
TEMP += K;RETURN TEMP;
}
INT SUM ( INT I, INT J ){
IF ( I > J )RETURN 0;
ELSERETURN I + SUM(I + 1, J);
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGE
TAIL RECURSION:
LAST OPERATION IN A PROCEDURE CALLS ITSELF WITH DIFFERENT ARGUMENTS.
AUTOMATIC RECURSIVE TO LOOP-CONVERSION:> REASSIGN PARAMETERS AND START OVER.
INT GCD ( INT U, INT V ){
IF ( V== 0 )RETURN U;
ELSERETURN GCD(V, U % V);
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGE
TAIL RECURSION:
LAST OPERATION IN A PROCEDURE CALLS ITSELF WITH DIFFERENT ARGUMENTS.
AUTOMATIC RECURSIVE TO LOOP-CONVERSION:> REASSIGN PARAMETERS AND START OVER.
INT GCD ( INT U, INT V ){
IF ( V== 0 )RETURN U;
ELSERETURN GCD(V, U % V);
}
INT GCD ( INT U, INT V ){ INT T1, T2; /* TEMPS INTRODUCED BY TRANSLATOR */
FOR ( ; ; ){ IF (V == 0 )
RETURN U;ELSE{
T1 = V;T2 = U % V; U = T1;V = T2;
}}
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGETAIL RECURSION:
LAST OPERATION IN A PROCEDURE CALLS ITSELF WITH DIFFERENT ARGUMENTS.
NOT SO AUTOMATIC RECURSIVE TO LOOP-CONVERSION:ACCUMULATING PARAMETERS
> USED TO PRECOMPUTE OPERATIONS PERFORMED AFTER THE RECURSIVE CALL.
EXAMPLE: SUM OF INTEGERS FROM I TO J.
INT SUM ( INT I, INT J ){
IF ( I > J )RETURN 0;
ELSERETURN I + SUM(I + 1, J);
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGETAIL RECURSION:
LAST OPERATION IN A PROCEDURE CALLS ITSELF WITH DIFFERENT ARGUMENTS.
NOT SO AUTOMATIC RECURSIVE TO LOOP-CONVERSION:ACCUMULATING PARAMETERS
> USED TO PRECOMPUTE OPERATIONS PERFORMED AFTER THE RECURSIVE CALL.
INT SUM1 ( INT I, INT J, INT SUMSOFAR ){ /* SUM1 IS CALLED A HELPING PROCEDURE */
{ IF (I > J )RETURN SUMSOFAR;
ELSERETURN SUM1( I + 1, J, SUMSOFAR + I );
}
INT SUM( INT I, INT J ){ RETURN SUM1( I, J, 0 );}
EXAMPLE: SUM OF INTEGERS FROM I TO J.
INT SUM ( INT I, INT J ){
IF ( I > J )RETURN 0;
ELSERETURN I + SUM(I + 1, J);
}
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGERESTRICTIONS OF IMPERATIVE LANGUAGES FOR FUNCTIONAL PROGRAMMING:
1. STRUCTURED VALUES SUCH AS ARRAYS AND RECORDS CANNOT BE RETURNED VALUES FROM FUNCTIONS.
2. THERE IS NO WAY TO BUILD A VALUE OF A STRUCTURED TYPE DIRECTLY.
3. FUNCTIONS ARE NOT FIRST-CLASS VALUES, SO HIGHER-ORDER FUNCTIONS CANNOT BE WRITTEN.
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGERESTRICTIONS OF IMPERATIVE LANGUAGES FOR FUNCTIONAL PROGRAMMING:
EXAMPLE: SORTING ARRAY IN C
1. AN ARRAY CANNOT BE RETURNED FROM A FUNCTION VALUE.
2. ANY ARRAY IS AUTOMATICALLY PASSED BY REFERENCE
> SORT IN PLACE
> VIOLATES THE RULE THAT THE INPUT OF A FUNCTION IN FP SHOULD ALWAYS BE DISTINGUISH FROM THE OUTPUT.
*MOST PROBLEMATIC RESTRICTION: NON-FIRST-CLASSNESS OF FUNCTIONS IN IMPERATIVE LANGUAGES.
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGE
EXAMPLEC CODE FOR A FUNCTION INT_ARRAY_MAX THAT COMPUTES THE MAXIMUM VALUE IN A NON-EMPTY ARRAY OF INTEGERS.
INT INT_ARRAY_MAX ( INT A[], INT SIZE )/* SIZE MUST BE > 0 */{
INT I, MAX = A[ 0 ];FOR(I = 1; I < SIZE; I++)
IF (MAX < A[ I ] )MAX = A[ I ];
RETURN MAX; }
Thursday, September 8, 2011
FUNCTIONAL PROGRAMMING IN AN IMPERATIVE LANGUAGEEXAMPLEC CODE FOR A FUNCTIONAL VERSION OF THE INT_ARRAY_MAX FUNCTION. IT USES A HELPING PROCEDURE INT_ARRAY_MAX1 WITH RECURSION AND AN ACCUMULATING PARAMETER.
INT INTMAX ( INT X, INT Y){
RETURN X > Y ? X : Y;}
INT INT_ARRAY_MAX1 ( INT A[], INT SIZE, INT SOFAR ){
IF( SIZE == 0 ) RETURN SOFAR;ELSE
RETURN INT_ARRAY_MAX1( A, SIZE - 1, INTMAX(SOFAR, A[SIZE-1]));}
INT INT_ARRAY_MAX ( INT A[], INT SIZE )/* SIZE MUST BE > 0 */{ RETURN INT_ARRAY_MAX1( A, SIZE - 1, A[ SIZE - 1 ]); }
Thursday, September 8, 2011
SCHEME: A DIALECT OF LISP
LISP [LATE 1950 AND EARLY 1960] CREATED BY JOHN MCCARTHY FROM MIT
LISP = LIST PROCESSOR
BASED ON LAMBDA CALCULUS OF A. CHURCH.
WAS AN INTERPRETER FOR AN IBM 704
FEATURES
UNIFORM REPRESENTATION OF PROGRAMS AS DATA USING A SINGLE GENERAL DATA STRUCTURE - THE LIST.
THE DEFINITION OF THE LANGUAGE USING AN INTERPRETER WRITTEN IN THE LANGUAGE ITSELF-CALLED A METACIRCULAR INTERPRETER.
THE AUTOMATIC MANAGEMENT OF ALL MEMORY BY THE RUNTIME SYSTEM.
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
THE CFG FOR SCHEME IS:
EXPRESSION ➝ ATOM | LISTATOM ➝ NUMBER | STRING | IDENTIFIER | CHARACTER | BOOLEANLIST ➝ ‘(‘EXPRESSION-SEQUENCE’)’EXPRESSION-SEQUENCE ➝ EXPRESSION EXPRESSION-SEQUENCE | EXPRESSION
EXAMPLES OF SCHEME EXPRESSIONS:
47 -A NUMBER“HELLO” -A STRING#T -THE BOOLEAN VALUE TRUE#\A -THE CHARACTER ‘A’(2.1 3.5 7.2 4.2) -A LIST OF NUMBERSB -AN IDENTIFIERHELLO -AN IDENTIFIER(+ 2 4) -A LIST CONSISTING OF THE IDENTIFIER ‘+’ AND TWO NUMBERS(* (+ 2 4) (/ 6 2)) -A LIST CONSISTING OF AN IDENTIFIER FOLLOWED BY TWO LISTS
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
THE CFG FOR SCHEME IS:
EXPRESSION ➝ ATOM | LISTATOM ➝ NUMBER | STRING | IDENTIFIER | CHARACTER | BOOLEANLIST ➝ ‘(‘EXPRESSION-SEQUENCE’)’EXPRESSION-SEQUENCE ➝ EXPRESSION EXPRESSION-SEQUENCE | EXPRESSION
SCHEME EVALUATION RULES [APPLICATIVE ORDER EVALUATION]
1. CONSTANT ATOMS, SUCH AS NUMBERS AND STRINGS EVALUATE TO THEMSELVES.
2. IDENTIFIERS ARE LOOKED UP IN THE CURRENT ENVIRONMENT AND REPLACED BY THE VALUE FOUND THERE. [DYNAMIC SYMBOL TABLE]
3. A LIST IS EVALUATED BY RECURSIVELY EVALUATING EACH ELEMENT IN THE LIST AS AN EXPRESSION; THE FIRST EXPRESSION IN THE LIST MUST EVALUATE TO A FUNCTION. THIS FUNCTION IS THEN APPLIED TO THE EVALUATED VALUES OF THE REST OF THE LIST.
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
SCHEME EVALUATION RULES [APPLICATIVE ORDER EVALUATION]
1. CONSTANT ATOMS, SUCH AS NUMBERS AND STRINGS EVALUATE TO THEMSELVES.
2. IDENTIFIERS ARE LOOKED UP IN THE CURRENT ENVIRONMENT AND REPLACED BY THE VALUE FOUND THERE. [DYNAMIC SYMBOL TABLE]
3. A LIST IS EVALUATED BY RECURSIVELY EVALUATING EACH ELEMENT IN THE LIST AS AN EXPRESSION; THE FIRST EXPRESSION IN THE LIST MUST EVALUATE TO A FUNCTION. THIS FUNCTION IS THEN APPLIED TO THE EVALUATED VALUES OF THE REST OF THE LIST.
EXAMPLES: EVALUATE
47 “HELLO” #T #\A (2.1 3.5 7.2 4.2) B HELLO (+ 2 4) (* (+ 2 4) (/ 6 2))
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
BUILT-IN FUNCTIONS
QUOTE: PREVENTS EVALUATION:
>(2.1 3.4 5.6)ERROR: THE OBJECT 2.1 IS NOT A PROCEDURE
>(QUOTE (2.1 3.4 5.6))(2.1 3.4 5.6)
IF: IF-THEN-ELSE CONSTRUCT(IF (=A 0 ) 0
(/ 1 A))
COND: IF-ELSEIF CONSTRUCT(COND((= A 0) 0)
((= A 1) 1)(ELSE (/ 1 A)))
SEMANTICS OF (IF EXP1 EXP2 EXP3):EXP1 EVALUATES FIRSTIF EXP1 EVALUATES TO FALSE (#F), THEN EXP3 IS EVALUATED; THEN EXP2 IS EVALUATED AND RETURNED.IF EXP3 IS ABSENT AND EXP1 EVALUATES TO FALSE, THEN THE VALUE OF THE EXPRESSION IS UNDEFINED.
Thursday, September 8, 2011
THE ELEMENTS OF SCHEMESEMANTICS OF (IF EXP1 EXP2 EXP3):
EXP1 EVALUATES FIRST
IF EXP1 EVALUATES TO FALSE (#F), THEN EXP3 IS EVALUATED; THEN EXP2 IS EVALUATED AND RETURNED.
IF EXP3 IS ABSENT AND EXP1 EVALUATES TO FALSE, THEN THE VALUE OF THE EXPRESSION IS UNDEFINED.
SEMANTICS OF (COND EXP1 EXP2 ... EXPN):EACH EXPI MUST BE A PAIR EXPI = (FST SND).
EACH EXPRESSION EXPI IS CONSIDERED IN ORDER, AND THE FIRST PART OF IT IS EVALUATED.
IF FST EVALUATES TO TRUE, THEN SND IS EVALUATED AND ITS VALUE IS RETURNED BY THE COND EXPRESSION.
IF NONEN OF THE CONDITIONS EVALUATE TO TRUE, THEN THE EXPRESSION IN THE ELSE IS EVALUATED AND RETURNED.
DELAYED EVALUATION:
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
BUILT-IN FUNCTIONS
> (LET ((A 2) (B 3)) (+ A B)) ; BINDING LIST5
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
FUNCTION DEFINITION
(DEFINE A 2)(DEFINE EMPTYLIST ‘())
(DEFINE (GCD U V) ; FUNCTION NAME AND PARAMETERS(IF (= V 0) ; FUNCTION BODY
U(GCD V (REMAINDER U V))))
Thursday, September 8, 2011
THE ELEMENTS OF SCHEME
BUILT-IN FUNCTIONS FOR I/O: READ AND DISPLAY
>(READ)
>(DISPLAY “HELLO WORLD”)
>(DISPLAY 234)
SEE PAGE 486 FOR A COMPLETE EXAMPLE WITH I/O
Thursday, September 8, 2011
DATA STRUCTURES IN SCHEMEBASIC DATA STRUCTURE: LIST
*EVERYTHING ELSE SHOULD BE PUT IN THAT FORMAT!!!
EXAMPLE: BINARY SEARCH TREE
NODE IS (NAME LEFT RIGHT)
(“HORSE” (“COW” () (“DOG” () ())) (“ZEBRA” (“YAK” () ()) () ))
“HORSE”
“COW” “ZEBRA”
“DOG”() “YAK” ()
() ()
Thursday, September 8, 2011
DATA STRUCTURES IN SCHEMEBASIC OPERATIONS ON LIST:
>(CAR L)
>(CONS L)
BINARY TREE:
(DEFINE (LEFTCHILD B) (CAR ( CDR B)))(DEFINE (RIGHTCHILD B) (CAR (CDR (CDR B))))(DEFINE (DATA B) (CAR B))
TREE TRAVERSAL:
(DEFINE (PRINT-TREE B)(COND ((NULL? B) ‘() )
(ELSE (PRINT-TREE (LEFTCHILD B)) (DISPLAY (DATA B)) (NEWLINE) (PRINT-TREE (RIGHTCHILD B)))))
Thursday, September 8, 2011
PROGRAMMING TECHNIQUES IN SCHEME
EXAMPLE: SQUARING THE NUMBERS IN A LIST
(DEFINE (SQUARE-LIST L)(IF (NULL? L) ‘()
(CONS (* (CAR L) (CAR L)) (SQUARE-LIST (CDR L)))))
EXAMPLE: PRINTING OUT THE SQUARES OF INTEGERS FROM 1 TO N
(DEFINE (PRINT-SQUARES LOW HIGH)(COND ((> LOW HIGH) ‘())
(ELSE (DISPLAY(* LOW LOW)) (NEWLINE) (PRINT-SQUARES (+ 1 LOW) HIGH))))
Thursday, September 8, 2011
Delayed EvaluationAn expression subject to lazy evaluation is not evaluated until its value is required and once is evaluated is never reevaluated.
delay
force
used only in the absence of side effects: the order of evaluation is unimportant.
benefits: some amount of computation might be avoided altogether if it is delayed until absolutely required.
stream (infinite lists) construction
Thursday, September 8, 2011
Delayed Evaluation
Use language R5RS
(define stream-car(lambda (s)
(car (force s))))
(define stream-cdr(lambda (s)
(cdr (force s))))
(define counters(let next ((n 1))(delay (cons n (next (+ n 1))))))
(stream-car counters)
Thursday, September 8, 2011
Delayed Evaluation
Use Language R5RS from DrRacket
(stream-car (stream-cdr counters))
(define stream-add(lambda (s1 s2)
(delay (cons (+ (stream-car s1) (stream-car s2))(stream-add (stream-cdr s1) (stream-cdr s2))))))
(define even-counters(stream-add counters counters))
(stream-car even-counters)
(stream-car (stream-cdr even-counters))
Thursday, September 8, 2011
ExercisesWrite recursive functions in Scheme for:
1. The nth Fibonacci number.
2. The sum of the nth first natural numbers.
3. The factorial of n.
4. Reversing a list of elements.
5. Computing the number of elements in a list.
Thursday, September 8, 2011