From: Drew Adams <drew.adams@oracle.com>
To: Michael Heerdegen <michael_heerdegen@web.de>,
"Miguel V. S. Frasson" <mvsfrasson@gmail.com>
Cc: Eric Abrahamsen <eric@ericabrahamsen.net>, 34708@debbugs.gnu.org
Subject: bug#34708: alist-get has unclear documentation
Date: Sun, 3 Mar 2019 07:51:51 -0800 (PST) [thread overview]
Message-ID: <fe232d0a-1423-4eea-8fd0-1b7fb89ce909@default> (raw)
In-Reply-To: <87mumcdu7f.fsf@web.de>
> > I think the sentence below is a good and short explanation for the
> > doc-string.
> >
> > The return value can be conveniently used as a generalized variable
Lose "conveniently", please.
> > (a place) to set the value associated with KEY in ALIST, like in the
> > example (setf (alist-get key alist) new-value)
>
> Thanks for the idea. I don't think we should explain it like this
> however, because when evaluating
>
> (setf (alist-get key alist) new-value)
>
> the function `alist-get' is never called, so there is no return value.
Yes. (But that text didn't say it was called, and
it didn't mention a return value.)
`setf' is a macro. Its PLACE arg serves as a
_specification_ of a place (a "generalized
variable") whose value is to be set. And "set"
means create or update.
It's not really about `alist-get' here; it's
about `setf'. `alist-get' itself has nothing
to do with using a generalized variable.
> Of course what is sexy about place expressions is that it looks like
> you would directly set the result of a function call, but what happens is
> that setf doesn't evaluate the call but analyses it and builds and
> evaluates code that leads to this result.
Yes. But that's "just" plumbing. It's not
important to explain that here, I think.
In terms of describing the role of `alist-get'
as a `setf' place it's not relevant, at a first
approximation.
That `setf' doesn't call `alist-get' but instead
analyses the spec and builds code that does the
right thing is not necessary for getting the main
point that `alist-get' can be used with `setf' to
specify an alist element to create or update.
> Eric suggested to say "this form is a setf-able place" but this also
> doesn't answer the question what this (form) is. `alist-get' is not a
> form, it's the name of a function. In my opinion it would be cleaner
> to say something like "the name of this function can be used to build
> place expressions" or "can be used in place expressions" or so.
> Better ideas welcome.
Yes wrt the substance (content). But an active
phrasing is often better than the passive "__ can
be used". Say what this does by saying what you
can do with it.
You can use function `alist-get' in a PLACE-expression
argument to `setf'. In this role it specifies an
alist element whose value `setf' sets:
(setf (alist-get KEY ALIST) NEW-VALUE)
Here, `setf' sets the value part of an element
of ALIST whose key is KEY to NEW-VALUE.
It's important to not give the impression that
there must be an _existing_ element with KEY.
Showing an example can help dispel that mistake.
(setq foo ())
(setf (alist-get 'a foo) 1
(alist-get 'b foo) 2)
C-h v foo ; ==> ((b . 2) (a . 1))
next prev parent reply other threads:[~2019-03-03 15:51 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-02 4:50 bug#34708: alist-get has unclear documentation Miguel V. S. Frasson
2019-03-02 9:25 ` Michael Heerdegen
2019-03-02 15:40 ` Miguel V. S. Frasson
2019-03-02 18:10 ` Michael Heerdegen
2019-03-02 19:06 ` Eric Abrahamsen
2019-03-03 0:15 ` Phil Sainty
2019-03-03 12:50 ` Michael Heerdegen
2019-03-19 1:35 ` Michael Heerdegen
2019-03-02 19:51 ` Miguel V. S. Frasson
2019-03-02 20:32 ` Eric Abrahamsen
2019-03-03 11:32 ` Miguel V. S. Frasson
2019-03-03 12:21 ` Michael Heerdegen
2019-03-03 15:51 ` Drew Adams [this message]
2019-03-03 16:49 ` Eric Abrahamsen
2019-03-04 16:24 ` Eric Abrahamsen
2019-03-04 16:38 ` Michael Heerdegen
2019-03-04 17:16 ` Eric Abrahamsen
2019-03-04 18:22 ` Michael Heerdegen
2019-03-04 22:49 ` Eric Abrahamsen
2019-03-05 12:35 ` Michael Heerdegen
2019-03-05 22:50 ` Eric Abrahamsen
2019-03-06 0:16 ` Drew Adams
2019-03-11 13:39 ` Michael Heerdegen
2019-03-11 14:52 ` Drew Adams
2019-03-11 16:19 ` Michael Heerdegen
2019-03-11 17:48 ` Drew Adams
2019-03-12 13:04 ` Michael Heerdegen
2019-03-12 14:48 ` Drew Adams
2019-03-12 16:08 ` Michael Heerdegen
2019-03-12 16:48 ` Drew Adams
2019-03-12 17:45 ` Michael Heerdegen
2019-03-12 13:12 ` Michael Heerdegen
2019-03-12 14:53 ` Drew Adams
2019-03-12 15:38 ` Michael Heerdegen
2019-03-12 16:18 ` Drew Adams
2019-03-12 17:55 ` Michael Heerdegen
2019-03-15 15:54 ` Michael Heerdegen
2019-03-15 18:48 ` Eric Abrahamsen
2019-03-27 22:31 ` Michael Heerdegen
2019-04-19 1:33 ` Michael Heerdegen
2019-04-19 2:24 ` bug#34708: Thanks Miguel V. S. Frasson
2019-04-19 4:18 ` Michael Heerdegen
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fe232d0a-1423-4eea-8fd0-1b7fb89ce909@default \
--to=drew.adams@oracle.com \
--cc=34708@debbugs.gnu.org \
--cc=eric@ericabrahamsen.net \
--cc=michael_heerdegen@web.de \
--cc=mvsfrasson@gmail.com \
/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 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).