From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jean Louis Newsgroups: gmane.emacs.help Subject: Re: [External] : Re: Appending lists Date: Sun, 20 Jun 2021 23:10:49 +0300 Message-ID: References: <20210617074843.GD16310@tuxteam.de> <87r1gy3f70.fsf@zoho.eu> <20210619065703.GB29866@tuxteam.de> <87fsxdzgl9.fsf@zoho.eu> <87im28gvsx.fsf@zoho.eu> <877diogvfx.fsf@zoho.eu> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23240"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mutt/2.0.7+183 (3d24855) (2021-05-28) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sun Jun 20 22:12:16 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lv3nj-0005ly-KH for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 20 Jun 2021 22:12:15 +0200 Original-Received: from localhost ([::1]:34656 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lv3nh-0005tV-O6 for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 20 Jun 2021 16:12:13 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lv3nL-0005tK-CR for help-gnu-emacs@gnu.org; Sun, 20 Jun 2021 16:11:51 -0400 Original-Received: from stw1.rcdrun.com ([217.170.207.13]:57137) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lv3nI-0006fO-Vk for help-gnu-emacs@gnu.org; Sun, 20 Jun 2021 16:11:50 -0400 Original-Received: from localhost ([::ffff:197.157.0.61]) (AUTH: PLAIN admin, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by stw1.rcdrun.com with ESMTPSA id 00000000000D9931.0000000060CFA102.0000484B; Sun, 20 Jun 2021 13:11:45 -0700 Mail-Followup-To: help-gnu-emacs@gnu.org Content-Disposition: inline In-Reply-To: <877diogvfx.fsf@zoho.eu> Received-SPF: pass client-ip=217.170.207.13; envelope-from=bugs@gnu.support; helo=stw1.rcdrun.com X-Spam_score_int: 29 X-Spam_score: 2.9 X-Spam_bar: ++ X-Spam_report: (2.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_SBL_CSS=3.335, RCVD_IN_SORBS_WEB=1.5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:131110 Archived-At: * Emanuel Berg via Users list for the GNU Emacs text editor [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/