From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Olivier Dion via General Guile related discussions Newsgroups: gmane.lisp.guile.user Subject: Re: escaping from a recursive call Date: Wed, 09 Nov 2022 11:51:55 -0500 Message-ID: <8735asoytw.fsf@laura> References: Reply-To: Olivier Dion Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21089"; mail-complaints-to="usenet@ciao.gmane.io" To: Damien Mattei , guile-user Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Wed Nov 09 17:53:04 2022 Return-path: Envelope-to: guile-user@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 1osoJz-0005Ey-UD for guile-user@m.gmane-mx.org; Wed, 09 Nov 2022 17:53:03 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1osoJA-0003tB-H5; Wed, 09 Nov 2022 11:52:12 -0500 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 1osoJ8-0003ry-9p for guile-user@gnu.org; Wed, 09 Nov 2022 11:52:10 -0500 Original-Received: from smtp.polymtl.ca ([132.207.4.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osoJ5-0004sH-SX for guile-user@gnu.org; Wed, 09 Nov 2022 11:52:10 -0500 Original-Received: from localhost (modemcable094.169-200-24.mc.videotron.ca [24.200.169.94]) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 2A9GptWW007120; Wed, 9 Nov 2022 11:52:00 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 2A9GptWW007120 In-Reply-To: X-Poly-FromMTA: (modemcable094.169-200-24.mc.videotron.ca [24.200.169.94]) at Wed, 9 Nov 2022 16:51:55 +0000 Received-SPF: pass client-ip=132.207.4.11; envelope-from=olivier.dion@polymtl.ca; helo=smtp.polymtl.ca X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:18701 Archived-At: On Wed, 09 Nov 2022, Damien Mattei wrote: > i need a way to escape not only the current call of a recursive function > (it is already done) but alls: > > example: > > (def (foo n) > (cond ((= n 0) 'end0) > ((= n 7) (return 'end7)) > (else (cons n (foo {n - 1}))))) Is that what you want? --8<---------------cut here---------------start------------->8--- (use-modules (ice-9 control)) (define (foo n) (let/ec return (let loop ((n n)) (cond ((= n 0) 'end0) ((= n 7) (return 'end7)) (else (cons n (loop (1- n)))))))) (pk (foo 5)) (pk (foo 10)) --8<---------------cut here---------------end--------------->8--- -- Olivier Dion oldiob.dev