Scheme and Clojure are Lisp-1 which means that both variables and functions names are in the same namespace.
Common Lisp is Lisp-2 which means that functions and variables have different namespaces.
Lisp has lexical scoping and dynamic scoping.
A binding made by
let lasts until the end of the
(let ((a 1)) (let ((a 2)) (let ((a 3)) (print a)) ;; 3 (print a)) ;; 2 (print a)) ;; 1
Function calls create bindings for their formal arguments when they are called:
(defun foo (a) (let ((a 2)) (print a)) ;; 2 (print a)) ;; 1 (foo 1)
A binding made by a function call lasts until the call returns.
let expression can be seen as syntactic sugar for the lambda form:
(let ((a 1) (b 3)) (+ a b))
is equivalent to
((lambda (a b) (+ a b)) 1 3)
(let ((to_add 4)) ((lambda (arg) (+ to_add arg)) 5))