[EMAIL PROTECTED] (Thomas A. Russ) writes:
(defun addn (n) #'(lambda (x) (+ x n)))
The same as def addn(n):
def fn(x):
return n + x
return fn
Is this really equivalent?
What happens if you call addn more than once with different parameters. Will you get different functions that you can use simultaneously?
Yes.
It also behaves correctly when a variable it refers to is later mutated.
BTW, the fact that a closure refers to a variable itself rather to its current value can be used to check the true attitude of languages with respect to functional programming, by observing how they understand their basic loops :-)
None of the examples you show close over values. The difference is in whether the loop constructs use one binding for their control variable or create new bindings in each iteration:
(loop for i below 10 collect (lambda (x) (setq i x)) into setters collect (lambda () i) into getters finally (print (funcall (elt getters 0))) (funcall (elt setters 4) 42) (print (funcall (elt getters 9))))
=> 10 => 42
If this difference matters to you, just be more explicit.
Pascal -- http://mail.python.org/mailman/listinfo/python-list