* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
@ 2010-08-21 21:55 MON KEY
2010-08-21 22:40 ` Stefan Monnier
2010-08-21 22:50 ` Andreas Schwab
0 siblings, 2 replies; 6+ messages in thread
From: MON KEY @ 2010-08-21 21:55 UTC (permalink / raw)
To: 6893
Interactive invocation of `eval-last-sexp' (e.g. "C-x C-e" ) in
Emacs-lisp mode buffer for this form:
`'#'(lambda (b) b)8
;=> 8
`eval-last-sexp' for this makes (some) sense:
`'#'(lambda (b) b)
;=> (quote (function (lambda (b) b)))
And so, presumably the above is equivalent to:
(eval '(list 'quote '(function (lambda (b) b))))
;=> (quote (function (lambda (b) b)))
But what is the equivalent form which would explain the results for
following:
`'#'(lambda (b) b)8
;=> 8
Surely it isn't this:
(funcall (eval (eval (eval '(list 'quote '(function (lambda (b) b)))))) 8)
;=> 8
If it is, then why is eval'ing the same `'#'(lambda (b) b)8 form with
`eval-expression' (e.g. "M-:") met with the message:
"Trailing garbage following expression"
Likewise, giving `eval-expression' this form lands me in the debugger:
(`'#'(lambda (b) b) 8)
;=> Debugger entered--Lisp error:
(wrong-number-of-arguments #[(structure) "\301\b!A\207"
[structure backquote-process] 2 1720176] 2)
Reproducable on 23.2 with emacs -Q
--
/s_P\
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
2010-08-21 21:55 bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode' MON KEY
@ 2010-08-21 22:40 ` Stefan Monnier
2010-08-22 0:17 ` MON KEY
2010-08-21 22:50 ` Andreas Schwab
1 sibling, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2010-08-21 22:40 UTC (permalink / raw)
To: MON KEY
> Interactive invocation of `eval-last-sexp' (e.g. "C-x C-e" ) in
> Emacs-lisp mode buffer for this form:
> `'#'(lambda (b) b)8
> ;=> 8
C-x C-e doesn't evaluate "the expression on the line" but "the last sexp
before point".
The "last-sexp" is just "8" (try C-M-b to see what it is), so whatever
other sexp you put before won't make any difference.
Stefan
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
2010-08-21 21:55 bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode' MON KEY
2010-08-21 22:40 ` Stefan Monnier
@ 2010-08-21 22:50 ` Andreas Schwab
1 sibling, 0 replies; 6+ messages in thread
From: Andreas Schwab @ 2010-08-21 22:50 UTC (permalink / raw)
To: MON KEY; +Cc: 6893
MON KEY <monkey@sandpframing.com> writes:
> But what is the equivalent form which would explain the results for
> following:
>
> `'#'(lambda (b) b)8
> ;=> 8
8
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
2010-08-21 22:40 ` Stefan Monnier
@ 2010-08-22 0:17 ` MON KEY
2010-08-22 22:49 ` Stefan Monnier
0 siblings, 1 reply; 6+ messages in thread
From: MON KEY @ 2010-08-22 0:17 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 6893, Andreas Schwab
On Sat, Aug 21, 2010 at 6:40 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>> Interactive invocation of `eval-last-sexp' (e.g. "C-x C-e" ) in
>> Emacs-lisp mode buffer for this form:
>
>> `'#'(lambda (b) b)8
>> ;=> 8
>
> C-x C-e doesn't evaluate "the expression on the line" but "the last sexp
> before point".
OK.
> The "last-sexp" is just "8" (try C-M-b to see what it is), so whatever
> other sexp you put before won't make any difference.
So what about these?
`'#'8
;=> (quote (function 8))
`#'?\x27?\x23
;=> (function 39)
Where did 35 go?
> Stefan
--
/s_P\
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
2010-08-22 0:17 ` MON KEY
@ 2010-08-22 22:49 ` Stefan Monnier
2010-08-24 20:49 ` MON KEY
0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2010-08-22 22:49 UTC (permalink / raw)
To: MON KEY; +Cc: 6893, Andreas Schwab
> So what about these?
> `'#'8
> ;=> (quote (function 8))
What about it? C-M-b indeed shows that '#'8 is the sexp.
> `#'?\x27?\x23
> ;=> (function 39)
> Where did 35 go?
That's a known shortcoming of syntax tables which aren't able to
describe correctly the syntax of Elisp char constants. But again C-M-b
shows you correctly what C-x C-e considers as "the last sexp".
Stefan
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode'
2010-08-22 22:49 ` Stefan Monnier
@ 2010-08-24 20:49 ` MON KEY
0 siblings, 0 replies; 6+ messages in thread
From: MON KEY @ 2010-08-24 20:49 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 6893, Andreas Schwab
On Sun, Aug 22, 2010 at 6:49 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>> So what about these?
>
>> `'#'8
>> ;=> (quote (function 8))
>
> What about it? C-M-b indeed shows that '#'8 is the sexp.
>
>> `#'?\x27?\x23
>> ;=> (function 39)
>
My point is that with these C M-b:
`'#'
`'
point is skipped back beyond the sexp at point to "M-b:".
Isn't there an implicit list after the last quote created by backquote?
It "feels" like there is with these:
`#1=#1#
;=> (nil)
`','#1=#1#
;=> (quote (nil))
`',#''#1=#1#
;=> (quote (quote (nil)))
`',#','#1=#1#
;=> (quote \,)
`,#','#1=#1#
;=> \,
`',#','nil
;=> (quote \,)
`',#',#1=#1#
;=> (quote \,)
>> Where did 35 go?
>
> That's a known shortcoming of syntax tables which aren't able to
> describe correctly the syntax of Elisp char constants.
Does that affect how the range of "last sexp" is allowed to extend beyond the
beginning-of-line only to find some arbitrary word barier a few lines up?
> But again C-M-b
> shows you correctly what C-x C-e considers as "the last sexp".
Yes well, even w/ C M-b hopping its still not a valid sexp for `eval':
`#'?\x27?\x23
=> (function 39)
(eval (function 39))
;=> 39
(eval `#'?\x27?\x23)
;=> Debugger entered--Lisp error: (wrong-number-of-arguments eval 2)
And besides, theres this anomaly too:
#&8"\377"
;=> "\377" (actually on Emacs 23.2 its => "ÿ")
`#&8"\377"
;=> "\377" (actually on Emacs 23.2 its => "ÿ")
`#&8"\x3fffff"
;=> "\377" (actually on Emacs 23.2 its => "ÿ")
Which would make sense except that _both_ of these manages to fail "correctly":
`'#s
`'#s" "
!string
=> Debugger entered--Lisp error: (invalid-read-syntax "#")
Despite the fact that C M-b for either of this forms:
`'#s(hash-table size 30 data (key1 val1 key2 300))
#s(hash-table size 30 data (key1 val1 key2 300))
puts point just after "#s".
I understand that the hash-table read syntax has a higher priority because its
newer but the cummulative effect of the various sharpsign quoting/evaluation
rules for the immediate sexp before point feels inconsistently biased when
viewed in the aggregate.
>
>
> Stefan
--
/s_P\
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-08-24 20:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-21 21:55 bug#6893: evaluating `'#'(lambda (b) b)8 ; => 8 with `eval-last-sexp' "C-x C-e" in `emacs-lisp-mode' MON KEY
2010-08-21 22:40 ` Stefan Monnier
2010-08-22 0:17 ` MON KEY
2010-08-22 22:49 ` Stefan Monnier
2010-08-24 20:49 ` MON KEY
2010-08-21 22:50 ` Andreas Schwab
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).