CSI2520  Cette fonction permet d’attribuer une valeur à une variable (set! nombre (+ 3 4)) (set! nombre (+ 1 nombre)) En SCHEME, les fonctions dont le.

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Cours n° 7 Standard Template Library II.
Les procédures et interruptions en Assembleur (Tasm)
Portée des variables VBA & Excel
Fonctions & procédures
Calculs de complexité d'algorithmes
Pour débutant … et autre Raymond Ripp
Répondez à ces quelques questions
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Gestion de FICHIERS.
Exercices Algorithmiques
Mise en œuvre d’un programme
Algorithme et structure de données
FLSI602 Génie Informatique et Réseaux
La tension électrique dans un montage en série
Langage C Révision.
Un langage de programmation fonctionnelle
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
OCaml - Les listes L3 MI.
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
OCaml – Les arbres L3 MI.
II. Chaînage, SDD séquentielles
Programmation fonctionnelle Le langage LISP
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Complément Le diagramme des classes
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
CSI2520, Hiver 2007 Python Un langage de programmation par scripting et plus…
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
Chapitre 9 Les sous-programmes.
Chapitre 3 Syntaxe et sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI3525: Concepts des Langages de Programmation Notes # 6: Langages de Programmation Fonctionelle II: Introduction au ML.
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
CSI2520 Ecriture sur l'écran ou dans un fichier Lecture à partir du clavier ou dun fichier Affichage de termes : *write(1+2) affiche 1+2 *write(X). affiche.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
L’essentiel du langage C
Utilisation avancée de linux
Javascript 1° PARTIE : LES BASES
Propriétés de la tension électrique
Mesurer la tension aux bornes d’un des composants.
Chapitre III : Les Systèmes experts
Ch. PAUL - Piles et Files à l'aide de listes chainées
Mesurer l’intensité du courant continu qui circule dans ce circuit.
Algorithmique Les structures Rappel L'enchaînement séquentiel
LES PILES ET FILES.
CSI2520  cdr vers le bas, cons vers le haut (define (traite-liste L) (if (null? L) () (cons (traite (car L)) (traite-liste (cdr L)))))
Chapitre 3 :Algèbre de Boole
Rappels de statistiques descriptives
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
XPath XML Path UP Web Année universitaire
Algorithmique et programmation en
Templates, Containers et STL Structures de données de base tableau, liste chaînée file, pile, arbres, hashtable collection, ensemble 2 caractéristiques.
Un survol du language C.
1 Quatrième journée Les flots de données Les entrées/sorties Les flots de données Les entrées/sorties.
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
CSI2520 (map abs ‘( )) ( ) (map (lambda (x y) (* x y)) ‘( ) ‘( )) ( )  Permet d’appliquer une fonction aux.
Objets et Actions Élémentaires.
Algorithmique et langage C
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
IFT359 – Programmation fonctionnelle Thème #8 Création de nouvelles formes syntaxiques 1.
IFT359 – Programmation fonctionnelle Thème #10 Évaluation par environnement et évaluateur méta-circulaire 1.
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
Transcription de la présentation:

CSI2520  Cette fonction permet d’attribuer une valeur à une variable (set! nombre (+ 3 4)) (set! nombre (+ 1 nombre)) En SCHEME, les fonctions dont le nom se termine par ! sont des fonctions qui modifient la valeur de l'un des arguments (opérations destructives).

CSI2520 (define interrupteur (let ((etat #f)) (lambda () (set! etat (not etat)) (if etat 'on 'off)))) Encapsulation de la variable lit dans la définition de light-switch

CSI2520 (define nombreDappels 0) (define kons (lambda (x y) (set! nombreDappels (+ nombreDappels 1)) (cons x y)))

CSI2520 (define secondesImp (lambda (h m s) (let ((sh 0) (sm 0) (total 0)) (set! sh (* 60 (* 60 h))) (set! sm (* 60 m)) (set! total (+ s (+ sh sm))) total)))

CSI2520 (define secondes (lambda (h m s) (let ((sh (* 60 (* 60 h))) (sm (* 60 m)) ((+ s (+ sh sm))))))

> (devine-un-nombre 10 20) 15 > (plus-petit) 12 > (plus-grand) 13 > (plus-grand) 14 (define inf 0) (define sup 1000) (define (devine) (truncate (/ (+ inf sup) 2))) (define (plus-petit) (set! sup (devine)) (devine)) (define (plus-grand) (set! inf (devine)) (devine)) (define (devine-un-nombre inferieur superieur) (set! inf inferieur) (set! sup superieur) (devine))

CSI2520 (define PILE ‘()) (define (vide?) (null? PILE)) (define depiler (lambda () (let (( res (car PILE))) (set! PILE (cdr PILE)) res ))) (define empiler (lambda (element) (set! PILE (cons element PILE)))) (define (top) (vide? `()) (else (car PILE)))

CSI2520  Ou évaluation paresseuse, consiste à ne pas évaluer immédiatement une expression (delay exp) ; retourne une ‘promesse’ d’évaluation (force promesse) ; force l’évaluation promise

CSI2520 (define (produit x y) (if (negative? x) (* x x) (* x (force y)))) (produit v (delay (sqrt v)))

CSI2520  Dans certains cas, il est possible d’obtenir un résultat sans avoir à évaluer tous les éléments d’une liste. (define (suite n1 n2 N) (if (zero? N) '() (cons (+ n1 n2) (suite n2 (+ n1 n2) (- N 1))))) (suite ) ( )

CSI2520 (define (membre-ord? nbre L) (cond ((null? L) '()) ((< nbre (car L)) #f) ((= nbre (car L)) #t) (#T (membre-ord? nbre (cdr L))))) (membre-ord? 15 (suite )) ; tous les éléments sont générés! ()

CSI2520 (define (suite n1 n2 N) (if (zero? N) '() (cons (+ n1 n2) (delay (suite n2 (+ n1 n2) (- N 1)))))) (define (membre-ord? nbre L) (let ((premier (car L))) (cond ((null? L) #f) ((< nbre premier) #f) ((= nbre premier) #t) (#T (membre-ord? nbre (force (cdr L)))))))

CSI2520  Constante : #\a #\A #\( #\space #\newline  Prédicats: (char? obj) (char-alphabetic? char) (char-numeric? char) (char-whitespace? char) (char-upper-case? char) (char-lower-case? char)

CSI2520  Fonctions: (char=? char_1 char_2) (char ? char_1 char_2) (char =? char_1 char_2)  Avec –ci, ces fonctions deviennent indépendantes à la casse: > (char=? #\a #\A) #f > (char-ci=? #\a #\A) #t

CSI2520 (char->integer #\a) 97 (integer->char (+ 1 (char->integer #\a))) #\b

CSI2520 ( string=? string_1 string_2) (string ? string_1 string_2) (string =? string_1 string_2) (string=? "Coco" "coco") #f (string-ci=? “Coco" “coco") #t (string-length "Bravo") 5 (string->list "Bravo") (#\B #\r #\a #\v #\o) (substring "computer" 3 6) "put"

CSI2520 (define (cesar-char char k) (if (char-alphabetic? char) (let ((base (if (char-upper-case? char) (char->integer #\A) (char->integer #\a)))) (integer->char (+ base (modulo (+ k (- (char->integer char) base)) 26))) ) char)) > (cesar-char #\r 7) #\y

CSI2520  read – retourne une entrée du clavier > (read) 234; entrée de l’utilisateur 234; valeur retournee par la fonction > (read) "hello world"  display – affiche son parametre sur ecran > (display "hello world") hello world > (display (+ 2 3)) 5  newline – affiche une nouvelle ligne

CSI2520  Definir une fonction qui lit un nombre (si ce n’est pas un nombre, elle continue de demander un nombre): > (define (ask-number) (display "Entrez un nombre: ") (let ((n (read))) (if (number? n) n (ask-number)))) > (ask-number) Entrez un nombre: a Entrez un nombre: (5 6) Entrez un nombre: “mais pourquoi ?" Entrez un nombre: 12 12

CSI2520  Une fonction qui lit un entier, fait appel à la factorielle et affiche le resultat: (define (fact-interactif) (display "Entrez un entier: ") (let ((n (read))) (display “La factorielle de ") (display n) (display " est ") (display (fact n)) (newline))) > (fact-interactif) Entrez un entier: 4 La factorielle de 4 est 24

CSI2520 (let ((p (open-input-file "fichier.txt"))) (let f ((x (read p))) (if (eof-object? x) (begin (close-input-port p) '()) (cons x (f (read p))))))

CSI2520 (call-with-input-file "fichier.txt" (lambda (p) (let f ((x (read p))) (if (eof-object? x) '() (cons x (f (read p)))))))

CSI2520 (define call-with-input-file (lambda (filename proc) (let ((p (open-input-file filename))) (let ((v (proc p))) (close-input-port p) v))))

CSI2520 (let ((p (open-output-file "fichier.txt"))) (let f ((ls list-to-be-printed)) (if (not (null? ls)) (begin (write (car ls) p) (newline p) (f (cdr ls))))) (close-output-port p))

CSI2520 (call-with-output-file "myfile.ss" (lambda (p) (let f ((ls list-to-be-printed)) (if (not (null? ls)) (begin (write (car ls) p) (newline p) (f (cdr ls)))))))

CSI2520 (define call-with-output-file (lambda (filename proc) (let ((p (open-output-file filename))) (let ((v (proc p))) (close-output-port p) v))))

CSI2520  Constructeurs and accesseurs > (define v (vector 1 (+ 1 2))) #(1 3) > (vector ‘a ‘b ‘c) #(a b c) > (vector-ref v 0) 1 > (vector-length v) 2 > (vector-set! v 3 10) 2  L’index commence à 0.

CSI2520 (let ((v (vector 'a 'b 'c 'd 'e))) (vector-set! v 2 'x) v) #(a b x d e) (define vector-fill! (lambda (v x) (let ((n (vector-length v))) (do ((i 0 (+ i 1))) ((= i n)) (vector-set! v i x))))) (let ((v (vector 1 2 3))) (vector-fill! v 0) v) #(0 0 0)

CSI2520 (list->vector L) (vector->list L) (define vector->list (lambda (s) (do ((i (- (vector-length s) 1) (- i 1)) (ls '() (cons (vector-ref s i) ls))) (( list '#(a b c)) (a b c) (let ((v '#( ))) (apply * (vector->list v))) 120

CSI2520 (let ((v '#( ))) (let ((ls (vector->list v))) (list->vector (map * ls ls)))) #( )

CSI2520 (define vector-sum (lambda (vec) (let ((size (vector-length vec)) (position 0) (total 0)) (do () ((= position size) total) (set! total (+ total (vector-ref vec position))) (set! position (+ position 1)))))) (define vector-sum (lambda (vec) (do ((remaining (vector-length vec) (- remaining 1)) (total 0 (+ total (vector-ref vec (- remaining 1))))) ((zero? remaining) total))))

CSI2520 (quick-sort '#( ) <) #( ) (merge-sort '( ) >) ( ) On doit avoir: (and (test x y) (test y x)) #f