help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: (read (current-buffer)) returns an integer in a buffer full of text?


From: Robert Thorpe
Subject: Re: (read (current-buffer)) returns an integer in a buffer full of text?
Date: 29 Nov 2006 06:17:44 -0800
User-agent: G2/1.0

Sebastian Tennant wrote:
> Quoth "Robert Thorpe" <rthorpe@realworldtech.com>:
> > Kevin Rodgers wrote:
> >> Robert Thorpe wrote:
> >> > Sebastian Tennant wrote:
> >> >> Hi everyone,
> >> >>
> >> >> If I execute the following code in *scratch* there's no problem:
> >> >>
> >> >>   (with-temp-buffer
> >> >>     (insert "hello")
> >> >>     (backward-word)
> >> >>     (read (current-buffer)))
> >> >>   => hello
> >> >
> >> > The function with-temp-buffer creates a temp buffer for the duration of
> >> > it's body.  It does _not_ select that buffer as the current buffer.
> >>
> >> Why would that matter?  The (read (current-buffer)) form is evaluated
> >> while the temp buffer is current.  Nothing depends on the temp buffer
> >> still being current after that.
> >
> > You're right, my last sentence is 100% wrong.  With-temp-buffer does
> > set the temp buffer to be the current buffer.
> >
> > I have no idea why this code doesn't work, it works for me under
> > similar conditions.
> > (The only mistake is that (backward-word) should be (backward-word 1))
>
> My error was in the location of point.  If two words are separated by
> a space, and point at the beginning of the second word,
> '(backward-word 2)' is required to move point to the beginning of the
> first word.
>
> However, why does this happen:
>
>  (with-temp-buffer
>    (insert "586114704")
>    (backward-word)
>    (read (current-buffer)))
>
>  => 49243792
>
> Is there an integer limit relating to symbols somehow?

The function "read" will read whatever type it finds.  It will treat
586114704 as an integer.

Try the following:-
Type 586114704 into scratch and do C-x C-e straight afterwards.
The echo area will display 49243792.  This is because there is a limit
on integers in Emacs, they are 26-bits long.  This allows you to
represent -67108865 to 67108864 I think.

Emacs doesn't warn you when you exceed the limit unfortunately.

Generally if you want to do numerical things with Lisp you should use
another lisp such as Common Lisp.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]