[Openmcl-devel] Closures

Stas Boukarev stassats at gmail.com
Sun Apr 20 11:38:42 UTC 2014


Taoufik Dachraoui <dachraoui.taoufik at gmail.com> writes:

> Hi
>
> Can someone explain the following:
>
> ? (let ((fn nil)) (dotimes (k 2) (push (lambda () (print k)) fn)) (dolist
> (f fn) (funcall f)))
>
> 2
> 2
> NIL
> ? (let ((fn nil)) (dotimes (k 2) (let ((r k)) (push (lambda () (print r))
> fn))) (dolist (f fn) (funcall f)))
>
> 1
> 0
> NIL
> ? (defvar r 10)
> R
> ? (let ((fn nil)) (dotimes (k 2) (let ((r k)) (push (lambda () (print r))
> fn))) (dolist (f fn) (funcall f)))
>
> 10     ?????
> 10     ?????
> NIL
Special variables do not produce closures, only lexical ones do.

-- 
With best regards, Stas.


More information about the Openmcl-devel mailing list