all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: gnuist006@gmail.com
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: Tue, 23 Oct 2007 18:06:58 -0000	[thread overview]
Message-ID: <1193162818.247085.305430@q3g2000prf.googlegroups.com> (raw)
In-Reply-To: <13hl1rug786p1f2@corp.supernews.com>

On Oct 20, 3:55 pm, "Alf P. Steinbach" <al...@start.no> wrote:
> * gnuist...@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.

Sure you have good ideas.

I still would like an equivalent implementation explained. Ofcourse,
smart
companies and smart programmers were doing all this before C++ came
and even in LISP they have atleast two of try catch throw.

  reply	other threads:[~2007-10-23 18:06 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
2007-10-23 18:06   ` gnuist006 [this message]
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=1193162818.247085.305430@q3g2000prf.googlegroups.com \
    --to=gnuist006@gmail.com \
    --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.