Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Lisp > Re: A question ...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 43 of 66 Topic 12412 of 13578
Post > Topic >>

Re: A question (confusion) about closure

by "joswig@[EMAIL PROTECTED] " <joswig@[EMAIL PROTECTED] May 2, 2008 at 04:11 PM

On May 2, 11:02=A0am, "xah...@[EMAIL PROTECTED]
" <xah...@[EMAIL PROTECTED]
> wrote:
> There is no universal definition of the concept of closure in the
> context of programing languages.

Fortunately there is. You just have to look it up.

> Basically, if your language can define a function, and maitain a
> permanent internal variable inside, it's closure.
>
> For example, if you define a global var, and your function use access
> and or set that global var, your function will be able to maintain a
> state.

Closures have nothing to do with global vars. Your attempt
to explain it does not help.

We can have different closures with the same function
and each has different variable bindings. Your global-variable-model
does not provide that.

(defun make-thing (name)
   (flet ((local-function (message &rest args)
            (case message
              (:print (format t "Hi, I am ~a" name))
              (:rename (setf name (first args))))))
     #'local-function))

(make-thing "Red Chair") returns a closure.
(make-thing "Blue Chair") returns another closure.

Let's look inside:

? (describe (make-thing "Red Chair"))
#<COMPILED-LEXICAL-CLOSURE LOCAL-FUNCTION #x2AA04BE>
Name: LOCAL-FUNCTION
Inner lfun: #<Compiled-function LOCAL-FUNCTION (Non-Global)
#x2A9AFD6>
Closed over values
(0): "Red Chair"

? (describe (make-thing "Blue Chair"))
#<COMPILED-LEXICAL-CLOSURE LOCAL-FUNCTION #x2AA3C6E>
Name: LOCAL-FUNCTION
Inner lfun: #<Compiled-function LOCAL-FUNCTION (Non-Global)
#x2A9AFD6>
Closed over values
(0): "Blue Chair"

=46rom the identifier you can see that both closures use the same 'Inner
lfun' #x2A9AFD6.
=46rom the identifier you can see that both closures are different:
#x2AA04BE  and  #x2AA3C6E
The closures list different 'closed over values: "Red Chair" and "Blue
Chair".

Both closures have the same inner function (it is just one function)
but different variable bindings.
So, we have two closures, but only one inner function and two
different bindings.

Do you see the difference to your 'explanation'? It is not sufficient
that a function
has its own (uniquely named) global variables. You would need new
variables
every time a closure gets created.

Let's try your version:

(defparameter __name nil)

(defun make-thing (name)
  (setf __name name)
  (flet ((local-function (message &rest args)
           (case message
             (:print (format t "Hi, I am ~a" __name))
             (:rename (setf __name (first args))))))
     #'local-function))

(let ((a (make-thing :a))
      (b (make-thing :b)))
   (funcall a :print)
   (terpri)
   (funcall b :print))

Hi, I am B
Hi, I am B

Too, bad. Doesn't work. No closures.

? (describe (make-thing :A))
#<Compiled-function LOCAL-FUNCTION (Non-Global)  #x2ADD4D6>
Name: LOCAL-FUNCTION
Arglist (analysis): (CCL::ARG-0 &REST CCL::THE-REST)

Again, no closure.


Above is btw. Common Lisp, which uses lexical binding by default
(different from Emacs Lisp)
and thus sup****ts closures directly.


> --------------
>
> Note: The terminology =93Closure=94 is actually a very bad terminology.
It=

> spreads endless confusion and non-understanding. See:

Your usual FUD. If you study the above example, you can end your
confusion.

=2E..
 




 66 Posts in Topic:
A question (confusion) about closure
Samik <samikc@[EMAIL P  2008-05-02 01:31:18 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-02 02:02:14 
Re: A question (confusion) about closure
lisp2.3.CalRobert@[EMAIL   2008-05-04 02:44:05 
Nigerian spammer harvesting from these newsgroups (was: A questi
lisp2.3.calrobert@[EMAIL   2008-05-28 13:41:29 
Re: Nigerian spammer harvesting from these newsgroups (was: A qu
Stan <spamblock@[EMAIL  2008-05-28 23:18:11 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-05 02:16:48 
Re: A question (confusion) about closure
Ken Tilton <kennytilto  2008-05-05 07:10:48 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-05 15:15:36 
Re: A question (confusion) about closure
Stefan Nobis <snobis@[  2008-05-05 17:01:04 
Re: A question (confusion) about closure
usenet1.3.CalRobert@[EMAI  2008-05-08 02:13:13 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-05 20:33:02 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-06 02:48:19 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-06 09:46:34 
Re: A question (confusion) about closure
Aaron Brown <arundelo@  2008-05-05 22:36:11 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-06 09:57:41 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-06 08:14:08 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-06 18:14:43 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-06 11:32:54 
Re: A question (confusion) about closure
Rainer Joswig <joswig@  2008-05-06 21:00:50 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-07 09:13:02 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-06 21:05:03 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-07 09:24:00 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-06 12:45:55 
Re: A question (confusion) about closure
Rainer Joswig <joswig@  2008-05-06 22:00:36 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 09:33:21 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 10:01:58 
Re: A question (confusion) about closure
"John Thingstad"  2008-05-07 12:22:42 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 13:55:10 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-07 17:29:51 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-07 06:50:30 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-07 07:50:06 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 17:48:02 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-07 17:56:46 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 17:51:56 
Re: A question (confusion) about closure
Didier Verna <didier@[  2008-05-07 18:02:00 
Re: A question (confusion) about closure
Rainer Joswig <joswig@  2008-05-07 18:29:09 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-13 14:29:41 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-07 11:35:16 
Re: A question (confusion) about closure
Rainer Joswig <joswig@  2008-05-07 20:57:00 
Re: A question (confusion) about closure
"John Thingstad"  2008-05-02 12:44:36 
Re: A question (confusion) about closure
Alan Crowe <alan@[EMAI  2008-05-02 13:02:48 
Re: A question (confusion) about closure
pjb@[EMAIL PROTECTED] (P  2008-05-02 17:25:23 
Re: A question (confusion) about closure
"joswig@[EMAIL PROTE  2008-05-02 16:11:11 
Re: A question (confusion) about closure
Tim X <timx@[EMAIL PRO  2008-05-07 20:02:30 
Re: A question (confusion) about closure
Edward <edward.dodge@[  2008-05-02 16:19:56 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-02 18:07:31 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-03 01:47:52 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-03 03:42:16 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-03 01:34:52 
Re: A question (confusion) about closure
"joswig@[EMAIL PROTE  2008-05-03 02:24:05 
Re: A question (confusion) about closure
viper-2 <visionat@[EMA  2008-05-03 07:24:04 
Re: A question (confusion) about closure
Tim X <timx@[EMAIL PRO  2008-05-04 17:21:38 
Re: A question (confusion) about closure
"xahlee@[EMAIL PROTE  2008-05-04 08:02:23 
Re: A question (confusion) about closure
Ken Tilton <kennytilto  2008-05-04 16:56:33 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-04 22:28:19 
Re: A question (confusion) about closure
Ken Tilton <kennytilto  2008-05-05 00:13:14 
Re: A question (confusion) about closure
Kent M Pitman <pitman@  2008-05-05 03:06:50 
Re: A question (confusion) about closure
"John Thingstad"  2008-05-05 09:30:22 
Re: A question (confusion) about closure
Rainer Joswig <joswig@  2008-05-05 10:08:40 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-06 17:12:20 
Re: A question (confusion) about closure
George Neuner <gneuner  2008-05-05 05:01:16 
Re: A question (confusion) about closure
Don Geddis <don@[EMAIL  2008-05-06 09:52:22 
[OT] Re: A question (confusion) about closure
Tim X <timx@[EMAIL PRO  2008-05-07 19:55:55 
Re: [OT] Re: A question (confusion) about closure
dkcombs@[EMAIL PROTECTED]  2008-06-07 01:37:57 
Re: [OT] Re: A question (confusion) about closure
Tim X <timx@[EMAIL PRO  2008-06-07 18:16:36 
Re: Nigerian spammer harvesting from these newsgroups (was: A
wooks <wookiz@[EMAIL P  2008-07-17 13:22:16 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Tue Oct 7 7:27:26 CDT 2008.