csc3315 (spring 2009)1 csc 3315 programming paradigms scheme language hamid harroud school of...

36
CSC3315 (Spring 2009) 1 CSC 3315 CSC 3315 Programming Paradigms Programming Paradigms Scheme Language Scheme Language Hamid Harroud Hamid Harroud School of Science and Engineering, Akhawayn School of Science and Engineering, Akhawayn University University http://www.aui.ma/~H.Harroud/csc3315/

Upload: jade-miles

Post on 12-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

CSC3315 (Spring 2009) 1

CSC 3315CSC 3315Programming Programming ParadigmsParadigmsScheme LanguageScheme Language

Hamid HarroudHamid HarroudSchool of Science and Engineering, Akhawayn School of Science and Engineering, Akhawayn

UniversityUniversityhttp://www.aui.ma/~H.Harroud/csc3315/

Page 2: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Functional Programming & Functional Programming & LispLisp

Designed by John McCarthy at MIT (1956 – 1959) for AI applications

Derived from -calculus theory (allows functions to be values in an expression)

Various dialects: Lisp 1.5 (1960), Scheme (1975), Common Lisp (1985)…[LISP = LISt Processor]

Rich Language: functional, symbolic. Uniform Syntax and Semantics

Page 3: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

In Scheme: Symbolic calculus. Basic objets : atoms (words), Atoms groups: lists (sentences).

Atoms + Lists = Symbolic Expressions (S-expr) Scheme manipulates S-exprs: A scheme

program is a S-expr Programs and Data have the same representation.

Functional Programming & Functional Programming & SchemeScheme

Page 4: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Domains: non numerical applications, especially: AI (expert systems, natural languages,...) Automatic reasoning (proof of theorems,

proof of programs,...) Formal calculus Games

Functional Programming & Functional Programming & SchemeScheme

Page 5: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Functional Programming: basic entity = function control structure = recursion

A function is a first class that can be created, assigned to variables, passed as a parameter or returned as a value.

Scheme is implemented as an

interactif loop

(read-eval-print loop).

Functional Programming & Functional Programming & SchemeScheme

Page 6: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Basic ExpressionsBasic Expressions Numbers: integers / floats. A variable is a name associated to a data, for example:

(define pi 3.14159) ; pi is a global variable

A variable has an implicit type, depending on its value. It can have a value of another type:

(set! pi 3.141592)

(set! pi 'alpha)

(set! pi (cons pi '(rho))) A variable can be local to a block: (let ((var1 E1)(var2 E2)...) <expr>)

Page 7: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Composed ExpressionsComposed Expressions

The general format of a list is:(E1 E2 ...... En) where Ei is a S-expression.

A list can be processed as a data:

'((William Shakespeare) (The Tempest))

or as a function call with variables passed by value:(append x y)

Page 8: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Defining a FunctionDefining a Function

Two ways:

>(define (carre x) (* x x))

or:>(define carre (lambda (x) (* x x)))

>(carre 2)

4 Functions may not have names!

>((lambda (x) (* x x)) 3)

9

Page 9: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

> (define (f x) (* (+ x 1)(- x 1))) > (define (fact n) ( if (> n 0)

( * n (fact (- n 1))) 1 ) )

>(fact 40)

815915283247897734345611269596115894272000000000

Defining a FunctionDefining a Function

Page 10: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

QuoteQuote

quote avoids the evaluation of an argument (expression or atom):

(quote pi) or 'pi If pi est defined as: (define pi 3.141592)

(write 'pi) displays pi symbol (write pi) displays 3.141592 (* 2.0 pi) returns 6.283184 (* 2.0 'pi) invalid parameter

Page 11: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Primitive FunctionsPrimitive Functions

cons, car, cdr are primitives (functions) that allow the construction and access to lists.

lists are defined recusively:empty list: (),non-empty list: (cons )where is a list.

The head and the tail of a list:(car (cons )) returns (cdr (cons )) returns (car '()) and (cdr '()): invalid

parameter

Page 12: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Primitive FunctionsPrimitive Functions

Predicates: functions that return #t or #f. (symbol? x)

#t if x is a symbol,

(number? x)#t if x is a number,

(eq? x y)#t if x and y are equal symbols.

Page 13: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

More FunctionsMore Functions

Can be defined using primitive functions:(equal? x y) if x and y are identical objects (not necesary atoms)(null? x) if x is () – empty list.(append x y) concatenate x and y.

(if (f ...) (g ...) "hello")

Page 14: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

More Functions: ExampleMore Functions: Example

> ( define ( NumberLists? x ) ( if ( not ( list? x ) ) #f ( if ( null? x ) #t ( if ( not ( number? ( car x ) ) ) #f ( NumberLists? ( cdr x )) ) ) ) )

> ( NumberLists? '( 1 2 3 4 ))#t

Page 15: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

> ( define ( numberList? x ) ( cond ( ( not ( list? x ) ) #f ) ( ( null? x ) #t ) ( ( not ( number? ( car x ) ) ) #f ) ( else ( numberList? ( cdr x ) ) )) )> ( numberList? ' ( 1 2 3 4 ) )#t> ( numberList? ' ( 1 2 3 bad 4 ) )#f

More Functions: ExampleMore Functions: Example

Page 16: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

More FunctionsMore Functions Elements Access in a list:

(caar x) (car (car x))(cdadr x) (cdr (car (cdr x))))

For example, the following evaluation is made in 4 steps:

(caadar '((p ((q r) s) u) (v)))(caadr '(p ((q r) s) u))(caar '(((q r) s) u))(car '((q r) s))'(q r)

The second element of a list (if it exists):(cadr x)

The third element : (caddr x), (cadddr x), ...

Page 17: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Example 2Example 2(define (same_neighbours? l)

(cond

((null? l) #f)

((null? (cdr l)) #f)

((equal? (car l)(cadr l)) #t)

(else

(same_neighbours? (cdr l)))

) )

Page 18: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

> ( define ( eqExpr? x y ) ( cond ( ( symbol? x ) ( eq? x y ) ) ( ( number? x ) ( eq? x y ) ) ; x is a list: ( ( null? x ) ( null? y ) ) ; x is non-empty list: ( ( null? y ) #f ) ( ( eqExpr? ( car x ) ( car y ) ) ( eqExpr? ( cdr x ) ( cdr y ) ) ) ( else #f )) )

Example 3Example 3

Page 19: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

>(define (repeatedElems L) (if (list? L) (doRepeatedElems L) ‘list-error))(define (doRepeatedElems L) (cond ((null? L) '()) ((member (car L) (cdr L)) (doRepeatedElems (cdr L)))

(else (cons (car L) (doRepeatedElems (cdr L))))) )

Example 4Example 4

Page 20: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

>(define reverse(lambda (x) (if (null? x) ’()

(append (reverse (cdr x)) (list (car x))) )) )

> (reverse '(a b c))(c b a)

More ExamplesMore Examples

Page 21: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

CSI2520, Hiver 2007

(define (empty?empty? stack)

(null? stack)

(define (poppop stack)

(if (empty? stack)

()

(cdr stack)

) )

(define (pushpush e stack)

(cons e stack)

)

(define (toptop stack)

(if (empty? stack)

()

(car stack)

) )

Pile en SchemePile en Scheme

Page 22: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define (min x) (cond ((not (numberlist? x)) (list 'not-number-list x)) ((null? x) x) (else (min-aux (car x) (cdr x))) ) )

(define (min-aux elt x) (cond ((null? x) elt) ((> elt (car x) (min-aux (car x)(cdr x))) (else (min-aux elt (cdr x)))) )

Minimum of a ListMinimum of a List

Page 23: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define (minL-aux Elt Lst) (if (null? Lst) Elt (let ((v1 (car Lst)) (v2 (cdr Lst))) (if (> Elt v1) (minl-aux v1 v2) (minl-aux Elt v2)

) ) ) )

Minimum of a List: local Minimum of a List: local variablesvariables

Page 24: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define append

(lambda (x y)

(cond

((null? x) y)

(else (cons (car x) (append (cdr x) y)))

) ) )

> (append '(a b c) '(d e))

(a b c d e)

> (string-append “abc” “123”)

“abc123”

Concatenation of two listsConcatenation of two lists

Page 25: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define member? (lambda (x y) (cond ((null? y) #f) ((equal? x (car y)) #t) (else (member? x (cdr y)))) ) )

> (member? 'aa '(bb ccc aa eeee rr ttttt))> (member? 'aa '(bb ccc aa eeee rr ttttt))#t> (member? 'aa '(bb ccc (aa) eeee rr ttttt))#f> (member 'aa '(bb ccc aa eeee rr ttttt))(aa eeee rr ttttt)

Member Function Member Function

Page 26: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Some functions can have other functions as parameters.

> (define (combine f1 f2 x) (f1 (f2 x)) )> (combine (lambda (x) (+ 1 x)) (lambda (x) (* 2 x)) 6)13> (combine (lambda (x) (* 2 x)) (lambda (x) (+ 1 x)) 6)14Équivalent to:> ((lambda (x) (+ 1 x)) ((lambda (x) (* 2 x)) 6))> ((lambda (x) (* 2 x)) ((lambda (x) (+ 1 x)) 6))

High-level functions: High-level functions: Functions as ParametersFunctions as Parameters

Page 27: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define f (lambda (x) (lambda (y) (lambda (z) (+ x y z)) ) ) )

> (((f 1) 2) 3)6

(define g ((f 1) 2))>(g 3)6

High-level functions: High-level functions: Functions as ParametersFunctions as Parameters

Page 28: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

(define (map F Lst) (if (null? Lst) Lst (cons (F (car Lst)) (map F (cdr Lst)))) )

map: applies a function to each element of a list:(E1 E2 ... En) ((f E1) (f E2) ... (f En))

For example(map (lambda(x) (+ x 1)) '(1 2 3))returns: (2 3 4)

High-level Functions: mapHigh-level Functions: map

Page 29: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

( map car '((a b) (c d) (e f)) )

( map cadr '((a b) (c d) (e f)) )

( map (lambda (x) (cons 3 (list x))) '(a b c d) )

High-level Functions: mapHigh-level Functions: map

Page 30: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Consider a function F with two parameters, and F0 a constant.

We want to have the following transformation

(F E1 (F E2 (F ... (F En F0) ) ...)

Which can be represented using an infix notation:

(E1 E2 ...... En) E1 F E2 F ...... F En F F0

High-level functions: High-level functions: ReducersReducers

Page 31: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Example:

(E1 E2 ...... En) E1 + E2 + ...... + En + 0

(E1 E2 ...... En) E1 * E2 * ...... * En * 1

(define (reduce F F0 L)

(if (null? L)

F0

(F (car L)

(reduce F F0 (cdr L)))

))

High-level functions: High-level functions: ReducersReducers

Page 32: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

> (reduce + 0 '(1 2 3 4))

> (reduce * 1 '(1 2 3 4))

> (reduce (lambda (x y) (+ x y 1)) 8 '(1 2 3))

> (reduce cons '() '(1 2 3 4))

> (reduce append '() '((1) (2) (3)))

High-level functions: High-level functions: ReducersReducers

Page 33: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Lists Manipulation

carcdrconsappendlistlengthcaar, cadr, cdar, cddr,caaaar, cddddr, ...

To define Functions

definelambda

Pre-defined FunctionsPre-defined Functions

Page 34: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Logic

not and or #t #f

Control

ifcondelselet

Arithmetic and comparison + < - > * <= / >= max = min

Pre-defined FunctionsPre-defined Functions

Page 35: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

Predicatessymbol? number? integer? list? null? eq? equal? procedure?member?

I/O Functions readwrite display print

Pre-defined FunctionsPre-defined Functions

Page 36: CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University H.Harroud/csc3315

CSI2520, Hiver 2007

Other functions

quote ---> ‘a, ‘(1 2)set! ---> (define a 1) (set! a (+ a 1))load ---> (load “scm1.txt”)map eval ---> (eval ‘(+ 1 2))apply ---> (apply + ‘(1 2))

Pre-defined FunctionsPre-defined Functions