all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Alf P. Steinbach" <alfps@start.no>
To: help-gnu-emacs@gnu.org
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	[thread overview]
Message-ID: <13hl1rug786p1f2@corp.supernews.com> (raw)
In-Reply-To: <1192913158.922454.108100@k35g2000prh.googlegroups.com>

* 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?

  parent reply	other threads:[~2007-10-20 22:55 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-20 20:45 How to exit out of a function ? what is try-catch-throw in terms of Program Counter gnuist006
2007-10-20 20:57 ` gnuist006
2007-10-20 22:55 ` Alf P. Steinbach [this message]
2007-10-23 18:06   ` gnuist006
2007-10-23 19:53     ` Alf P. Steinbach
2007-11-04 23:02   ` David Thompson
2007-11-05  5:07     ` Alf P. Steinbach
2007-11-05  5:59       ` Alf P. Steinbach
2007-12-02 23:20       ` David Thompson
2007-12-02 23:51         ` Alf P. Steinbach
2007-10-21  1:08 ` Jim Langston
2007-10-21  2:30 ` Keith Thompson
2007-10-21 10:44   ` Kenny McCormack
2007-10-21 10:55     ` santosh
2007-10-21 12:26       ` Richard Heathfield
2007-10-21 22:35       ` Mark McIntyre
2007-10-21 12:09     ` Malcolm McLean
2007-10-21 15:23       ` Kenny McCormack
2007-10-21 15:54         ` santosh
2007-10-21 17:39         ` Malcolm McLean
2007-10-21 21:53           ` Kenny McCormack
2007-10-21  8:03 ` Malcolm McLean
2007-10-21 16:07 ` abhy
2007-10-21 17:43   ` santosh
2007-10-23  9:04 ` Joel Yliluoma
2007-10-23 16:33 ` Stefan Monnier
2007-10-23 16:44   ` gnuist006
2007-10-23 16:45   ` Victor Bazarov
2007-10-24  1:06     ` Stefan Monnier
2007-10-23 16:54   ` gnuist006
2007-10-23 17:14     ` Alf P. Steinbach
2007-10-24  1:09     ` Stefan Monnier
2007-10-24  0:02   ` Joel Yliluoma

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13hl1rug786p1f2@corp.supernews.com \
    --to=alfps@start.no \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.