all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Jean Louis <bugs@gnu.support>
To: help-gnu-emacs@gnu.org
Subject: Re: [External] : Re: Appending lists
Date: Sun, 20 Jun 2021 23:10:49 +0300	[thread overview]
Message-ID: <YM+gyU4oka8zfmoo@protected.localdomain> (raw)
In-Reply-To: <877diogvfx.fsf@zoho.eu>

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2021-06-20 23:00]:
> > After this discussion, I thought I'd examine my `nconc' once
> > more and I then realized my use of them resembles a functional
> > style, while it (nconc) is already destructively doing the
> > updateing [...]
> 
> What functions are doing this except for `nreverse' and
> `nconc'?
> 
> I think I have probably used them the same way, should change
> it now when I have learned of their true nature...
> 
> PS. Except for nreverse and nconc, `sort' was mentioned.
>     And the docstring confirms it, "SEQ is modified by side
>     effects." Well, my code has the word "sort" 52 times so
>     I'll check that out tomorrow, Gw...

From: (info "(elisp) Standard Properties")

‘side-effect-free’
     A non-‘nil’ value indicates that the named function is free of side
     effects (*note What Is a Function::), so the byte compiler may
     ignore a call whose value is unused.  If the property’s value is
     ‘error-free’, the byte compiler may even delete such unused calls.
     In addition to byte compiler optimizations, this property is also
     used for determining function safety (*note Function Safety::).

Now... you could make a list of all functions and separate those with
`side-effect-free' and those without, though I don't think it would
guarantee the result.

Then: (info "(elisp) What Is a Function")

13.1 What Is a Function?
========================

In a general sense, a function is a rule for carrying out a computation
given input values called “arguments”.  The result of the computation is
called the “value” or “return value” of the function.  The computation
can also have side effects, such as lasting changes in the values of
variables or the contents of data structures (*note Definition of side
effect::).  A “pure function” is a function which, in addition to having
no side effects, always returns the same value for the same combination
of arguments, regardless of external factors such as machine type or
system state.

Now, you can search in Emacs Lisp manual for "side effect" or
"destruct" and often functions beginning with `n' are such:

 -- Function: nbutlast x &optional n
     This is a version of ‘butlast’ that works by destructively
     modifying the ‘cdr’ of the appropriate element, rather than making
     a copy of the list.

(info "(elisp) Modifying Lists")

(info "(elisp) Rearrangement")

I like following and use it often:

 -- Function: delq object list
     This function destructively removes all elements ‘eq’ to OBJECT
     from LIST, and returns the resulting list.  The letter ‘q’ in
     ‘delq’ says that it uses ‘eq’ to compare OBJECT against the
     elements of the list, like ‘memq’ and ‘remq’.

But I should probably use this one in `let' forms for easier debuggin:

 -- Function: remove object sequence
     This function is the non-destructive counterpart of ‘delete’.  It
     returns a copy of ‘sequence’, a list, vector, or string, with
     elements ‘equal’ to ‘object’ removed.  For example:

More to go:

 -- Function: delete-dups list
     This function destructively removes all ‘equal’ duplicates from
     LIST, stores the result in LIST and returns it.  Of several ‘equal’
     occurrences of an element in LIST, ‘delete-dups’ keeps the first
     one.

Search for "destruct".

-- 
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

In support of Richard M. Stallman
https://stallmansupport.org/



  reply	other threads:[~2021-06-20 20:10 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-17  3:18 Appending lists Drew Adams
2021-06-17  7:48 ` tomas
2021-06-18 23:38   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-18 23:50   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-19  6:57     ` tomas
2021-06-19 21:31       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-19 22:07         ` [External] : " Drew Adams
2021-06-20 19:50           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 19:58             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 20:10               ` Jean Louis [this message]
2021-06-20 20:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 19:59             ` Jean Louis
2021-06-20 20:22               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 20:42               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 20:49                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 21:49                   ` Jean Louis
2021-06-20 22:54                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 23:30                       ` Jean Louis
2021-06-21  0:29                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 21:46                 ` Jean Louis
2021-06-20 22:09             ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-06-20 23:04               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-20 23:10                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  -- strict thread matches above, loose matches on Subject: below --
2021-06-16 14:16 Drew Adams
2021-06-16 17:03 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-16 18:00   ` Drew Adams
2021-06-14 16:36 Pierpaolo Bernardi
2021-06-14 16:40 ` henri-biard
2021-06-14 18:21   ` Alexandr Vityazev
2021-06-15  0:46     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-15  8:27       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-15  9:18         ` tomas
2021-06-16  1:11           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-16  7:28             ` tomas
2021-06-16 16:42               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-16 16:55                 ` [External] : " Drew Adams
2021-06-16 17:06                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-16 17:54                     ` Drew Adams
2021-06-16 23:49                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-17  7:54                         ` tomas
2021-06-18 23:55                           ` Emanuel Berg via Users list for the GNU Emacs text editor

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=YM+gyU4oka8zfmoo@protected.localdomain \
    --to=bugs@gnu.support \
    --cc=help-gnu-emacs@gnu.org \
    /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.