;;; Exercice 1: à tester soi-même ;;; Exercice 2 ;; 5. (defun list-to-pairs (l) (mapcar (lambda (x) (cons x (count x l))) (remove-duplicates l))) ;;; Exercice 3 ;; 6. (defun m-set (mset) (remove-duplicates mset)) ;; 7. (defun m-adjoin (e mset &optional (cardinality 1)) (append (make-list cardinality :initial-element e) mset)) ;; 8. (defun m-union (mset1 mset2) (append mset1 mset2)) ;; 9. (defun m-intersection (mset1 mset2) (mapcan (lambda (e) (make-list (min (m-cardinality e mset1) (m-cardinality e mset2)) :initial-element e)) (m-set mset1))) ;;; Exercice 4 ;; 10. (defun m-full (&optional (cardinality 1)) (lambda (e) (declare (ignore e)) cardinality)) ;; 11. (defun m-adjoin (e mset &optional (count 1)) (lambda (x) (let ((c (m-cardinality x mset))) (if (= x e) (+ c count) c)))) ;; 12. (defun m-union (mset1 mset2) (lambda (x) (+ (m-cardinality x mset1) (m-cardinality x mset2)))) ;; 13. (defun m-subset (n mset) (labels ((aux (n mset l) (if (minusp n) l (aux (1- n) mset (append (make-list (m-cardinality n mset) :initial-element n) l))))) (aux n mset '())))