;;; Exercice 1 (cons '(A B C) '(1 2 3)) (append '(A B C) '((1 2) 3)) (last '((A 1) (B 2) (C 3))) (butlast '((A 1) (B 2) (C 3))) (list (1+ 2) (1- 5) 6) (remove-if #'zerop '(0 1 0 2 0 3 0 0 0)) (remove-if-not (lambda (x) (= x 3)) '(0 1 2 3 0 1 2 3)) (mapcar (lambda (x) (* 2 x)) '(1 2 3)) (funcall (lambda (x y) (+ (* 2 x) y)) 2 3) (assoc 'bleu '((rouge . red) (vert . green) (bleu . blue) (jaune . yellow))) ;;; Exercice 2 (defun mystere (op l) (cond ((endp l) l) ((zerop (car l)) (mystere op (cdr l))) (t (cons (funcall op (car l)) (mystere op (cdr l)))))) (defparameter *l* '(0.0 1.0 2.0 0.0 4.0)) (mystere #'/ *l*) (defun mystere-it (op l) (do ((l l (cdr l)) (nl ())) ((endp l) (nreverse nl)) (unless (zerop (car l)) (push (funcall op (car l)) nl)))) (mapcar #'/ (remove-if #'zerop *l*)) ;;; Exercice 3 (defun size-vector (v n) (let ((nt (make-array n :initial-element 0))) (dotimes (i (min (length v) n) nt) (setf (aref nt i) (aref v i))))) ;; ou mieux (defun size-vector (vec n) (setf (subseq (make-array n :initial-element 0) 0) vec)) (size-vector #(1 2 3 4) 8) (size-vector #(1 2 3 4) 2) (defun list-vector (t1 t2) (let* ((len (max (length t1) (length t2))) (t1 (size-vector t1 len)) (t2 (size-vector t2 len)) (nt (make-array len))) (dotimes (i len nt) (setf (aref nt i) (list (aref t1 i) (aref t2 i)))))) (list-vector #(1 2) #(3 4 5 6)) (list-vector #(3 4 5 6) #(1 2)) ;;; Exercice 4 (defun f (x0 x1 x2) (+ (* x0 x0) x0 x1 (- (* x1 x2)))) (defun place (n i v xi) (append (make-list i :initial-element v) (list xi) (make-list (- n (1+ i)) :initial-element v))) (defun proj (f n i v) (lambda (xi) (apply f (place n i v xi)))) (proj #'f 3 1 3) (funcall (proj #'f 3 1 3) 10)