all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Rolf Ade <rolf@pointsman.de>
To: emacs-tangents@gnu.org
Cc: Marcin Borkowski <mbork@mbork.pl>
Subject: Re: 2016-05-23 Emacs News
Date: Fri, 10 Jun 2016 17:22:16 +0200	[thread overview]
Message-ID: <87r3c5cbmf.fsf@linux-qg7d.fritz.box> (raw)
In-Reply-To: 87shwlf8x6.fsf@mbork.pl


Marcin Borkowski <mbork@mbork.pl> writes:
> On 2016-06-10, at 15:37, Rolf Ade <rolf@pointsman.de> wrote:
>> Nicolas Richard <youngfrog@members.fsf.org> writes:
>>> Rolf Ade <rolf@pointsman.de> writes:
>>>> (That is:
>>>> http://mbork.pl/2016-05-23_Literal_values_and_destructive_functions)
>>>> 
>>>> Wait, what?
>>>> [...]
>>>> in *Messages*. Could someone please explain that to me?
>>>
>>> The article you're referring to explains just that. Is it somehow
>>> unclear ? Quoting the article:
>>>
>>> | What’s going on?
>>> | 
>>> | Well, the literal in the function definition was actually changed. (If
>>> | you evaluate the defun form now, it will be redefined once again to
>>> | the “correct” value.) If you don’t believe it, try this: M-:
>>> | (symbol-function #'destructive-havoc), or even better, M-x
>>> | pp-eval-expression RET (symbol-function #'destructive-havoc) RET and
>>> | see for yourself.
>>
>> Well ..., sorry, yes, that explanation isn't clear to me. [...]
>
> It's not like `sort' changes the _function_.  But the function contains
> a _literal structure_ (like "a constant"), and it is remembered as
> a "pointer" (conceptually, not necessarily in C sense).  So when `sort'
> changes the structure "pointed to" by its argument (and it gets the
> "pointer" to the very same structure referred to by the function), it
> looks like the function is changed.
>
> Is that better?  (If yes, I'll amend the article.)

Hrrrhmm ... this discussion forces me, to paint myself as blockhead, but
no, it still feels I poke around in the dark with a long stick.

I could accept, that '(1 3 2) defines some global "constant", that gets
modified by the `sort' call.

But if I then look at:

(defun destructive-havoc1 ()
  "Example of destructive havoc."
  (setq foo '(1 3 2))
  (message "before sort, foo is: %s" foo)
  (sort foo #'<)
  (message "after sort, foo is: %s" foo))

(defun destructive-havoc2 ()
  "Example of destructive havoc."
  (setq foo '(1 3 2))
  (message "before sort, foo is: %s" foo)
  (sort foo #'<)
  (message "after sort, foo is: %s" foo))

Evalute both defuns. Then do M-: (destructive-havoc1), then M-:
(destructive-havoc2), then look at the *Messages* buffer. I see

before sort, foo is: (1 3 2)
after sort, foo is: (1 2 3)
before sort, foo is: (1 3 2)
after sort, foo is: (1 2 3)

So, ... '(1 3 2) defines some (defun local) "constant" ...?

I'm still afraid, I miss completely some basic concept or syntax
understanding.




  reply	other threads:[~2016-06-10 15:22 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-23 16:44 2016-05-23 Emacs News Sacha Chua
2016-06-10  0:04 ` Rolf Ade
2016-06-10 10:30   ` Nicolas Richard
2016-06-10 13:37     ` Rolf Ade
2016-06-10 13:52       ` Marcin Borkowski
2016-06-10 15:22         ` Rolf Ade [this message]
2016-06-10 16:45           ` John Mastro
2016-06-10 14:55       ` Nicolas Richard
2016-06-10 16:01         ` Rolf Ade

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r3c5cbmf.fsf@linux-qg7d.fritz.box \
    --to=rolf@pointsman.de \
    --cc=emacs-tangents@gnu.org \
    --cc=mbork@mbork.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.