From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Alf P. Steinbach" Newsgroups: gmane.emacs.help Subject: Re: How to exit out of a function ? what is try-catch-throw in terms of Program Counter Date: Sun, 21 Oct 2007 00:55:53 +0200 Organization: Posted via Supernews, http://www.supernews.com Message-ID: <13hl1rug786p1f2@corp.supernews.com> References: <1192913158.922454.108100@k35g2000prh.googlegroups.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1192953059 24379 80.91.229.12 (21 Oct 2007 07:50:59 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 21 Oct 2007 07:50:59 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sun Oct 21 09:51:00 2007 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IjVaM-00087d-6m for geh-help-gnu-emacs@m.gmane.org; Sun, 21 Oct 2007 09:50:58 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IjVaE-0006b2-Ju for geh-help-gnu-emacs@m.gmane.org; Sun, 21 Oct 2007 03:50:50 -0400 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!postnews.google.com!news3.google.com!sn-xt-sjc-05!sn-xt-sjc-01!sn-post-sjc-02!sn-post-sjc-01!supernews.com!corp.supernews.com!not-for-mail Original-Newsgroups: gnu.emacs.help,comp.lang.c,comp.lang.c++ User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051201 Thunderbird/1.5 Mnenhy/0.7.3.0 In-Reply-To: <1192913158.922454.108100@k35g2000prh.googlegroups.com> Original-X-Complaints-To: abuse@supernews.com Original-Lines: 96 Original-Xref: shelby.stanford.edu gnu.emacs.help:153144 comp.lang.c:827776 comp.lang.c++:954207 X-Mailman-Approved-At: Sun, 21 Oct 2007 03:50:32 -0400 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:48657 Archived-At: * gnuist006@gmail.com: > I have some code like this: > > (if (test) > (exit) > (do something)) > > > or > > (if (test) > ( do something) > (exit)) > > > Various levels of nestings. > > I have several questions, basic to sophisticated. > > (1) What is the lisp equivalent idiom for (exit) as in bash or > in C. C++ does not have a built-in 'exit' command. There is a library function 'exit' which exits the process. One must assume that's not what you mean, and that you're not asking C and C++ programmers to teach you Lisp. Therefore, assuming you want to exit the function or the block. > (2) What is the best practice to handle this kind of problems? It's not a general class of problem. Appropriate solutions depend on the problem at hand. E.g., in C++, // (if (test) (exit) (do something)) void foo() { if( !test ) { doSomething(); } } void bar() { if( test ) { return; } doSomething(); } > (3) What is the intermediate practice to handle this kind of > problems. ? > NOTE: I am really afraid of try-catch-throw. I have never been > able to understand it since it does not exist in C and I cant > really visualize the construct in terms of C. That is what my > brain can process. If you understand it so well, you can show > me how one would really implement that kind of construct in > C and then by extension I can see that kind of program flow > in LISP. Whether its imperative programming or functional, > beneath there is program counter and assembly. C is close > to machine so much that it is almost assembly. So understanding try-c- > t in C is equivalent to understanding at > the level of machine language. The closest equivalent in C would be a 'longjmp'. However, a C++ exception is more limited, in that it will only jump up the call chain, and it's more powerful, in that it will destroy local objects as it does so. Also, if you use 'longjmp' in C++ you're practically doomed (unless you use it to jump between co-routines with their own stacks), because 'longjmp' doesn't destroy local objects. > I therefore take the liberty to crosspost in C and C++ groups. Uh. Cheers, & hth., - Alf -- A: Because it messes up the order in which people normally read text. Q: Why is it such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail?