Marcin 'Qrczak' Kowalczyk wrote:
[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

Reply via email to