Download presentation
Presentation is loading. Please wait.
Published byJade Miles Modified over 9 years ago
1
CSC3315 (Spring 2009)1 CSC 3315 Programming Paradigms Scheme Language Hamid Harroud School of Science and Engineering, Akhawayn University http://www.aui.ma/~H.Harroud/csc3315/
2
Functional Programming & Lisp 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
3
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 & Scheme
4
Domains: non numerical applications, especially: AI (expert systems, natural languages,...) Automatic reasoning (proof of theorems, proof of programs,...) Formal calculus Games Functional Programming & Scheme
5
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 & Scheme
6
Basic 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)...) )
7
Composed Expressions The general format of a list is: (E 1 E 2...... E n ) where E i 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)
8
Defining 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
9
> (define (f x) (* (+ x 1)(- x 1))) > (define (fact n) ( if (> n 0) ( * n (fact (- n 1))) 1 ) >(fact 40) 815915283247897734345611269596115894272000000000 Defining a Function
10
Quote 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
11
Primitive 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
12
Primitive 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.
13
More 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")
14
More 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
15
> ( 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: Example
16
More 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),...
17
Example 2 (define (same_neighbours? l) (cond ((null? l) #f) ((null? (cdr l)) #f) ((equal? (car l)(cadr l)) #t) (else (same_neighbours? (cdr l))) )
18
> ( 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 3
19
>(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 4
20
>(define reverse (lambda (x) (if (null? x) ’() (append (reverse (cdr x)) (list (car x)) ) )) ) > (reverse '(a b c)) (c b a) More Examples
21
CSI2520, Hiver 2007 empty? (define (empty? stack) (null? stack) ) pop (define (pop stack) (if (empty? stack) () (cdr stack) ) push (define (push e stack) (cons e stack) ) top (define (top stack) (if (empty? stack) () (car stack) ) Pile en Scheme
22
(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 List
23
(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 variables
24
(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 lists
25
(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)) #t > (member? 'aa '(bb ccc (aa) eeee rr ttttt)) #f > (member 'aa '(bb ccc aa eeee rr ttttt)) (aa eeee rr ttttt) Member Function
26
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: Functions as Parameters
27
(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: Functions as Parameters
28
(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: (E 1 E 2... E n ) ((f E 1 ) (f E 2 )... (f E n )) For example (map (lambda(x) (+ x 1)) '(1 2 3)) returns: (2 3 4) High-level Functions: map
29
( 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: map
30
Consider a function F with two parameters, and F 0 a constant. We want to have the following transformation (F E 1 (F E 2 (F... (F E n F 0 ) )...) Which can be represented using an infix notation: (E 1 E 2...... E n ) E 1 F E 2 F...... F E n F F 0 High-level functions: Reducers
31
Example: (E 1 E 2...... E n ) E 1 + E 2 +...... + E n + 0 (E 1 E 2...... E n ) E 1 * E 2 *...... * E n * 1 (define (reduce F F0 L) (if (null? L) F0 (F (car L) (reduce F F0 (cdr L))) )) High-level functions: Reducers
32
> (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: Reducers
33
Lists Manipulation car cdr cons append list length caar, cadr, cdar, cddr, caaaar, cddddr,... To define Functions define lambda Pre-defined Functions
34
Logic not and or #t #f Control if cond else let Arithmetic and comparison + < - > * <= / >= max = min Pre-defined Functions
35
Predicates symbol? number? integer? list? null? eq? equal? procedure? member? I/O Functions read write display print Pre-defined Functions
36
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 Functions
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.