[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

# Issue: PROCLAIM-LEXICAL (Version 7)

• To: eb@lucid.com
• Subject: Issue: PROCLAIM-LEXICAL (Version 7)
• From: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>
• Date: Mon, 26 Sep 88 17:35 EDT
• Cc: KMP@STONY-BROOK.SCRC.Symbolics.COM, CL-Cleanup@SAIL.Stanford.EDU, JAR@AI.AI.MIT.EDU
• In-reply-to: <8809262107.AA00152@blacksox>

```    Date: Mon, 26 Sep 88 14:07:48 pdt
From: Eric Benson <eb@lucid.com>

Date: Mon, 26 Sep 88 15:44 EDT
From: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>

Does the following look ok to you?

#1: (proclaim '(lexical x))
(proclaim '(special y))
(setq x 1 y 2)
(defun tst ()
(let ((x 3) (y 4))
(locally (declare (special x) (lexical y))
(list x y
(funcall (let ((x 5) (y 6))
#'(lambda () (list x y))))))))
(tst) => (1 2 (5 4))

I think that's (1 2 (5 6)).

No, I'm not as tired this time, and I think I'm right ...

X gets bound lexically to 3 because X is [pervasively] proclaimed LEXICAL.
Y gets bound specially to 4 because Y is [pervasively] proclaimed SPECIAL.
Reference style for name X is changed to SPECIAL, making lexical X=3 invisible.
Reference style for name Y is changed to LEXICAL, making dynamic Y=4 invisible.
Global X=1 and global Y=2 are first two elements of list.
X gets bound lexically to 5 because X is [pervasively] proclaimed LEXICAL.
Y gets bound specially to 6 because Y is [pervasively] proclaimed SPECIAL.
Closure is returned, capturing [lexical] X=5 but not [special] Y=6.
Dynamic binding of Y to 6 disappears, dynamic binding of Y to 4 reverts.
Closure is funcalled, returning captured X=5 and dynamically active Y=4
in a list which becomes third list element.

Make sense?

```