;;; Module adt-fbf.rkt - Livre "Premiers Cours de Programmation avec Scheme" (Ellipses ed, 2010) ;;; Doit etre sauvegarde comme 'langage determine par le source' ! ;;; Racket > v5.0 #lang racket (provide atome? make-neg make-fbf2 connecteur arg1 arg2) ; les FBF de la Logique d'ordre 0 ; le type abstrait "fbf en logique d'ordre 0" ; un parametre F denote une fbf (define (atome? F) ; le reconnaisseur d'atomes [symboles p, q, r...] (symbol? F)) (define (make-neg F) ; le constructeur de molecule unaire (negation) (cond ((atome? F) (list 'non F)) ((equal? (connecteur F) 'non) (arg1 F)) ; petite simplification au passage... (else (list 'non F)))) (define (make-fbf2 r Fg Fd) ; le constructeur de molecule binaire (et, ou, =>) (if (not (member r '(et ou =>))) (error 'make-fbf2 "Mauvais connecteur: ~a" r) (list Fg r Fd))) ; representation interne infixee (define (connecteur mol) ; on suppose que mol est une molecule (if (= (length mol) 2) (first mol) ; non (second mol))) ; et, ou, => (define (arg1 mol) ; mol est une molecule (if (= (length mol) 2) (second mol) (first mol))) (define (arg2 mol) ; mol est une molecule (if (= (length mol) 2) (error 'arg2 "Molecule unaire: ~a" mol) (third mol)))