Generalmente in linguaggi procedurali / imperativi, è consigliabile posizionare le dichiarazioni delle variabili il più vicino possibile all'utilizzo.
Questo sembra un po 'confuso in lisp, considerando che viene usato più codice se ci sono lets
separati.
Dato un esempio di funzione che usa due lets
:
(defun draw-box (new-image corners)
(let ((h-len (- (alast (alast corners))
(alast (car corners))))
(h-offset (alast (car corners))))
(dotimes (i h-len)
(setf (aref new-image (car (car corners)) (+ i h-offset) 0) 0)
(setf (aref new-image (car (car corners)) (+ i h-offset) 1) 255)
(setf (aref new-image (car (car corners)) (+ i h-offset) 2) 0)
(setf (aref new-image (car (alast corners)) (+ i h-offset) 0) 0)
(setf (aref new-image (car (alast corners)) (+ i h-offset) 1) 255)
(setf (aref new-image (car (alast corners)) (+ i h-offset) 2) 0)))
(let ((v-len (- (car (alast corners))
(car (car corners))))
(v-offset (car (car corners))))
(dotimes (i v-len)
(setf (aref new-image (+ i v-offset) (alast (car corners)) 0) 0)
(setf (aref new-image (+ i v-offset) (alast (car corners)) 1) 255)
(setf (aref new-image (+ i v-offset) (alast (car corners)) 2) 0)
(setf (aref new-image (+ i v-offset) (alast (alast corners)) 0) 0)
(setf (aref new-image (+ i v-offset) (alast (alast corners)) 1) 255)
(setf (aref new-image (+ i v-offset) (alast (alast corners)) 2) 0))))
Dove non userò v-len
e v-offset
fino a metà della funzione, sono titubante a dichiararlo nella parte superiore della funzione solo per usare solo un let
.
Ciò che è generalmente considerato best practice quando si dichiarano variabili in funzioni più lunghe in cui si potrebbe usare una variabile solo più tardi nella funzione?