;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (require :asdf-install) ;; (asdf-install:install "http://martin-loetzsch.de/gtfl/gtfl.tar.gz") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1. hiƩrarchie des classes ;; 2. (defgeneric proprietes (graphe) (:method-combination append :most-specific-last)) (defmethod proprietes append ((g graphe-simple)) (list "aucun noeud relie a lui-meme")) (defmethod proprietes append ((g arbre-pointe)) (list "existence noeud distingue")) (defmethod proprietes append ((g graphe-non-oriente)) (list "relation symetrique")) (defmethod proprietes append ((g arbre)) (list "chaine unique entre tout couple de noeuds distincts")) (defmethod proprietes append ((g graphe-sans-cycle)) (list "aucune chaine simple d'un noeud vers lui-meme")) ;; 3. (defun arcs-corrects (graphe) (let ((arcs (arcs graphe))) (when arcs (subsetp (reduce #'union (arcs graphe)) (noeuds graphe))))) (defmethod initialize-instance :after ((graphe graphe) &rest initargs &key &allow-other-keys) (declare (ignore initargs)) (assert (arcs-corrects graphe))) (defmethod initialize-instance :after ((graphe arbre-pointe) &rest initargs &key &allow-other-keys) (declare (ignore initargs)) (assert (member (racine graphe) (noeuds graphe)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1. ;; ((1) (2 2) (3 3 3)) ;; 2. (set-macro-character #\& (lambda (stream char) (declare (ignore char)) (list 'quote (make-list (read stream t nil t) :initial-element 0)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun convert (format-in format-out fichier-in &optional (replace nil)) (let ((fichier-out (if replace fichier-in (format nil "~A_~A" fichier-in format-out)))) (with-open-file (input fichier-in :external-format format-in) (with-open-file (output fichier-out :direction :output :external-format format-out :if-exists :overwrite :if-does-not-exist :create) (loop for line = (read-line input t nil) then (read-line input nil nil) while line do (write-line line output)))) fichier-out))