From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: recursion to iteration macro Date: Fri, 22 Mar 2024 23:56:15 +0100 Message-ID: <871q813mgg.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10045"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:AmFUjcfyIC1dy8w89W5ZNJpeEgk= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Mar 23 07:25:21 2024 Return-path: Envelope-to: ged-emacs-devel@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 1rnuoj-0002PT-MP for ged-emacs-devel@m.gmane-mx.org; Sat, 23 Mar 2024 07:25:21 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rnuo4-0000BX-UQ; Sat, 23 Mar 2024 02:24:41 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rnnoS-0000jq-Qq for emacs-devel@gnu.org; Fri, 22 Mar 2024 18:56:36 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rnnoK-0008V5-DH for emacs-devel@gnu.org; Fri, 22 Mar 2024 18:56:36 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1rnnoG-0006gy-Uc for emacs-devel@gnu.org; Fri, 22 Mar 2024 23:56:25 +0100 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sat, 23 Mar 2024 02:24:36 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:317242 Archived-At: Did anyone try to write a macro or by using some other method to translate arbitrary use of recursion into functionally equivalent code that is iteration only? I read [1] this is theoretically possible and that seems reasonable as well, as with loops, local functions etc you have everything you need to implement it. You can even have an expanding data structure, e.g. a list, to implement a virtual stack, still all within the one function, if you are fond of it. With execution all advantages should be with iteration but sometimes recursion makes for compact, elegant code that can also be more intuitive, more fun to write. Recursion is not so common, in part for this exact reason, but if we had this, maybe we would see a little recursion renaissance and proliferation? The best of both worlds anyone? You _will_ be assimilated! [1] https://en.wikipedia.org/wiki/Recursion_(computer_science) https://stackoverflow.com/questions/931762/can-every-recursion-be-converted-into-iteration -- underground experts united https://dataswamp.org/~incal