unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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).