From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.devel Subject: Re: Help with recursive destructive function Date: Mon, 07 May 2018 04:01:03 +0200 Message-ID: <87bmds9qcg.fsf@web.de> References: <87efiqzzd2.fsf@ericabrahamsen.net> <87bmdu3mtf.fsf@web.de> <87zi1e9kju.fsf@web.de> <87o9hs3aht.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1525658363 30229 195.159.176.226 (7 May 2018 01:59:23 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 7 May 2018 01:59:23 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: emacs-devel@gnu.org To: Eric Abrahamsen Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon May 07 03:59:19 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fFVQs-0007mk-P9 for ged-emacs-devel@m.gmane.org; Mon, 07 May 2018 03:59:18 +0200 Original-Received: from localhost ([::1]:43844 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFVSz-0000Fu-RO for ged-emacs-devel@m.gmane.org; Sun, 06 May 2018 22:01:29 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:44887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fFVSq-0000Ej-OB for emacs-devel@gnu.org; Sun, 06 May 2018 22:01:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fFVSn-0007pQ-MU for emacs-devel@gnu.org; Sun, 06 May 2018 22:01:20 -0400 Original-Received: from mout.web.de ([212.227.15.14]:60155) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fFVSn-0007oa-Cm for emacs-devel@gnu.org; Sun, 06 May 2018 22:01:17 -0400 Original-Received: from drachen.dragon ([188.110.196.170]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LZeYO-1eU3Dh1MQG-00lTG5; Mon, 07 May 2018 04:01:05 +0200 In-Reply-To: <87o9hs3aht.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Sun, 06 May 2018 11:27:42 -0700") X-Provags-ID: V03:K1:bC4TuoKQa77CtR2ofO+ZDsvZ+hWSs1zo1Vyr6UfdosQTAwEt3Iu QmQCJl39az7eOr/kDU1mJSlMJP8jsaKZBhh6CTr56hV4FlQCmgpFut/1SIjB/utO+bNIHpP P31wsQ/txmzIKs6jXmtKUBRYOtb3O9VmweDYaLtkUmgMiKMDhoP/ARhhWDObjs5G4ZavhfU MWLjRHjhWyJ5l/4SnhkOg== X-UI-Out-Filterresults: notjunk:1;V01:K0:0tI4iGCmNf0=:ZWfMp3xwN/4QxqvNQ0d3JT 1R4zMzR52nxRNTEDeeDzBBOSzIHDxa0sVlEA54FQ0FRleh+rRv8g90FNqxdvdNrao9BachqjY hGOI1CQxh3wxki4oK3qBhwb2x3BiWeAoTizcxJjIDVpl2XnarSm2yuM/xRU7BafxkBU9SKMUA Mr8p8ZfU9PJ5wSIU1qBsXq5JH92NCc2zGAhdyCzF97nUZ4oT+bkus0Hto+D8AE10Gn7HlW0Nl idRglRqwORFzOu4IClbcFSPCzJGaPXm8keiBmMEv4daQofqbPIoXGQhYxn4yPk2UgjA2gVix/ G88hzsuPkMRIoJIUFSFOggw+tCek9/8aEvEqcXXn1Vh6xzLpZnHz3Wc4F3ogBLQQeSriB2yJJ xgY8bILmfzFOa+39n4RUdy4hR0luI3YkxCB6NhANWM1hB7RBO2BBkpPAT3iflMFxPVwzNCbus /zeXxC53LcBQrP5J9RmslpSaiYOoRu3P2rSkz7eji3POjolMqrOgUm7b4D7TEB8ZCMvH4NG2r S1u8ItK1KZ4avziPy8OmiaS+dE3B3mYalQCwb7oXppmvraSU/g0vQaKi0qCAjTP11KXPqVlaD CWESg/7kvR4QxxJmsABcJjrAvpefDUvHqbR3SKkkpMTKKoMRK1CW6D33zX9cdwUCJUBAM9M5B W9NhbbMjPc+ka0WIXcTdG4eUJQSo5Yqo1VksbZbd7AZicAoDZM946hWqMVGqYFJN3dlnNpJYb IDNbhKS/otdEJ0bErCIhRvggsNo41jCxHrpV20bQigaS814j3dCG/ZJsLUwogen9lfD6EdQf X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.15.14 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:225097 Archived-At: Eric Abrahamsen writes: > Oh hang on, this doesn't work for all cases: the "by #'cdr" prevents > it from hitting the cdr of cons cells: > > (let ((tree '("c" (2 ("d" . 3)) (4 . "e") "f"))) > (iter-do (_ (iter-tree-example tree))) > tree) > > --> ("C" (2 ("D" . 3)) (4 . "e") "F") Not only that (it's easy to fix), but I also realized that this approach doesn't circumvent the recursion issue. But if your data is not extremely deeply nested, recursion should not be such a problem. > The best I've been able to come up with is: > > (defun useless (val) > (while (consp val) > (let ((head (car val))) > (cond ((stringp head) > (setcar val (upcase head))) > ((listp head) > (useless head))) > (when (stringp (cdr val)) > (setcdr val (upcase (cdr val)))) > (setq val (cdr val))))) > > Recurses on car, and only repeats the test twice. I'd love to know if > that could be simplified... Looks ok to me in principle. Michael.