Subject: Re: newbie exception handling question
From: Erik Naggum <erik@naggum.net>
Date: Mon, 10 Sep 2001 09:36:50 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3209103409627643@naggum.net>

* Donna <donnamiller@mail.com>
> of course this will produce an error/exception and that is what I want to 
> catch and handle gracefully, basically by giving this program a bad score 
> and exiting from the fitness function.

  If you wrap the entire function body in an ignore-errors form, it will
  terminate upon encountering any errors at all and return two values: a
  nil primary value and the error object as the secondary value, which you
  are free to ignore, as well.  This is a quick and painless exit from a
  function with an error with the added bonus of returning "false".  If you
  need more scoring "resolution" than that, perhaps the calling function
  can take care of it?

> Now I could write functions like  newrest, newfirst, etc and handle the
> case when the argument is not a list,  then when I find the best fit
> program change newrest to rest, etc. But that  seems awkward to me. I
> would really rather do something more elegant. I  would welcome any
> suggestions, ideas, and comments.

  Common Lisp has a "safe mode" where all errors must be signalled.  It
  should be the default in your environment, but can be obtained with

(declaim (optimize (safety 3)))

  In my experience, this is where implementations differ the most in
  conforming, so it is hard to trust this requirement without talking to
  other users of the same implementation.  However, if you have more
  knowledge than the system can intuit from what you are attempting to do,
  you could write your own evaluator and examine this knowledge for
  consistency before you get any errors..  This is not as hard as it seems.

///