;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CL-USER> (log-analyzer "f1.txt" "f2.txt") ;; Treating entry 2 ;; Treating entry 23 ;; Treating entry 1 ;; Treating entry 45 ;; Treating entry 12 ;; Treating entry 23 ;; captured by parse-log-stream ;; bad-entry RR ;; Treating entry 45 ;; (((2 23 1 45) . "f1.txt") ((12 23 45) . "f2.txt")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defmethod display-sequence ((l sequence) stream &key (sep " ")) (when l (mapc (lambda (e) (format stream "~A~A" e sep)) (butlast l)) (format stream "~A" (car (last l))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1- (defpackage term (:use :common-lisp)) ;; 2- (defclass named-object () ((name :initarg :name :reader name))) ;; 3- (defmethod print-object ((o named-object) stream) (princ (name o) stream)) ;; 4- (defclass arity-symbol (named-object) ((arity :initarg :arity :reader arity))) ;; 5- (defun make-arity-symbol (name &optional (arity 0)) (make-instance 'arity-symbol :name name :arity arity)) ;; 6- (defclass general-term () ()) ;; 7- (defclass var (named-object general-term) ()) ;; 8- (defclass term (general-term) ((root :initarg :root :reader root) (args :initarg :args :reader args))) ;; 9- ;; hiérarchie des classes ;; -> : hérite de ;; ;; term -> general-term ;; var -> general-term et named-object ;; arity-symbol -> named-object ;; 10- (defmethod initialize-instance :after ((term term) &rest initargs &key &allow-other-keys) (declare (ignore initargs)) (assert (= (arity (root term)) (length (args term))))) ;; 11- (defun make-term (root &optional (args nil)) (make-instance 'term :root root :args args)) ;; 12- (defmethod print-object ((term term) stream) (let ((root (root term))) (format stream "~A" root) (when (plusp (arity root)) (format stream "(") (display-sequence (args term) stream :sep ",") (format stream ")")))) ;; 13- (defgeneric term-size (general-term) (:documentation "the number of non variable symbols in GENERAL-TERM")) (defmethod term-size ((var var)) 0) (defmethod term-size ((term term)) (1+ (reduce #'+ (mapcar #'term-size (args term)) :initial-value 0)))