;;; Module adt-file.rkt - Livre "Premiers Cours de Programmation avec Scheme" (Ellipses ed, 2010) ;;; Doit etre sauvegarde comme 'langage determine par le source' ! ;;; Racket > v5.0 ;;; File d'attente fonctionnelle, operations en O(1) amorti d'apres Burton. ;;; Livre PCPS section 9.8.1 #lang racket (provide (all-defined-out)) ; j'exporte toutes les fonctions definies... (define (file-vide) (list empty empty)) (define (file-vide? f) (and (empty? (first f)) (empty? (second f)))) (define (enfiler x f) (list (first f) (cons x (second f)))) (define (defiler f) (if (empty? (first f)) (if (empty? (second f)) (error 'defiler "File vide") (list (rest (reverse (second f))) empty)) (list (rest (first f)) (second f)))) (define (last L) (if (empty? (rest L)) (first L) (last (rest L)))) (define (premier f) (if (empty? (first f)) (if (empty? (second f)) (error 'premier "File vide") (last (second f))) (first (first f)))) ; --------- test ----------- (define ($reverse L) (printf "REVERSE\n") (reverse L)) (define (print-file f) (printf "> ") (for ([x (in-list (reverse (append (reverse (second f)) (first f))))]) (printf "~a " x)) (printf ">\n")) (define (show-file f) f) (define (dummy-file n) (if (= n 0) (file-vide) (enfiler n (dummy-file (- n 1))))) ;(define f (dummy-file 5)) ;(show-file f) ;(set! f (defiler f)) ;(show-file f) ;(set! f (defiler f)) ;(show-file f)