A mettre dans .emacs

(put 'do 'lisp-indent-function 2)
(put 'dolist 'lisp-indent-function 1)
(put 'dotimes 'lisp-indent-function 1)
(put 'block 'lisp-indent-function 1)
(put 'when 'lisp-indent-function 1)
(put 'unless 'lisp-indent-function 1)
(put 'if 'lisp-indent-function nil)
(put 'labels 'lisp-indent-function 1)


*****  debuts.lisp

Voici l'indentation préférée de `power' (automatique avec les
expressions ci-dessus):

(defun power (x n)
  (labels ((aux (n y)
		(if (= n 0) y (aux (- n 1) (* x y)))))
    (aux n 1)))

Il faut peut-être parles de dolist dans les itérations.


*****  basic.lisp

J'aime bien l'exo sur les ensembles, mais utiliser :test au lieu de
:equality.

Pas d'espace avant `)'

(defun set-from-list (l)
  (cond ((endp l) the-empty-set)
	(t (let ((s (set-from-list (cdr l))))
	     (if (set-member (car l) s)
		 s
	         (cons (car l) s))))))


Indentation:

(defun set-member (x s &key (equality #'eql))
  (cond ((set-emptyp s)
	 nil)
        ((funcall equality x (car s))
         t)
        (t (set-member x (cdr s) :equality equality))))

Ou mieux

(defun set-member (x s &key (equality #'eql))
  (cond ((set-emptyp s) nil)
        ((funcall equality x (car s)) t)
        (t (set-member x (cdr s) :equality equality))))

ou mieux

(defun set-member (x s &key (equality #'eql))
  (and (not (set-emptyp s)) 
       (or (funcall equality x (car s))
           (set-member x (cdr s) :equality equality))))

attention à l'utilisation de la fonction eval.  Normalement, il ne
faut pas s'en servir.  Il faut le dire immediatement.  Sinon, on va
avoir pcb de programmes avec eval.

Indentation:

(defun table-de-multiplication (n)
  (labels ((iota (n)
		 (if (zerop n)
		     '()
		     (cons n (iota (- n 1))))))
    (let ((intervalle (reverse (iota n))))
      (cartesian intervalle
		 intervalle
		 :operator
		 #'(lambda (i j)
		     (list i 'par j 'font (* i j)))))))

****** horner.lisp

Je ne pense pas que vous avez assez de temps pour le faire le 1er TD. 
