help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to exit out of a function ? what is try-catch-throw in terms of


From: Alf P. Steinbach
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
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

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]