Subject: Re: [SWIPL] Type error vs. silent failure

From: Paulo Moura <[email-masked]>
Date: Fri, 26 Oct 2001 15:15:34 +0100

On Sexta, Outubro 26, 2001, at 12:01 , Jan Wielemaker wrote:

> Gernot,
>
>> [ Sorry, must have been discussed in the past, but couldn't find 
>> anything ]
> ...
> Without a standard, behaviour isn't defined.  Ok, there is some de-facto
> standard that says what nth1 must be doing, but there is little de-facto
> standard on how to handle things for which it wasn't designed
> (get/generate the nth-element).

In Logtalk I try to always generate exceptions that "fit" in the style 
defined in the ISO Standard for built-in predicates. However, is not 
always clear or commonly accepted that a call should fail or instead 
generate an exception. Sometimes people's programs rely on a failure 
where an exception would be the expected result (I remember a discussion 
in a Prolog mailing list with people complaining about an ISO definiton 
for arg/3 generating an exeception for calls like arg(-1, ...)).

> ...
> Only in some really performance-critical situations I sometimes estimate
> whether using catch/3 or checking is more efficient.  Note that catch/3
> is not cheap for many reasons.  The call is a meta-call, you have to
> push the goal, template and recovery onto the stack and if an exception
> happens another expensive unwinding and meta-call must take place.  So,
> in 99% of the cases checking is more attractive from this perspective.

Always doing argument checking for library predicates is probably 
overkill for many applications. I have been playing around with the idea 
of defining two sets of library objects: one for debugging or critical 
applications containing error-checking code for every predicate and 
another version with that safe belt removed for applications that do not 
need/want error-checking. The two versions of the objects will share the 
same name. The programmer or the application will choose the version to 
load (possibly with some compiler flag).

Paulo

-----------------------------------------------------------
Paulo Jorge Lopes de Moura
Dep. of Informatics                   Office 4.3  Ext. 3257
University of Beira Interior          Phone: +351 275319700
6201-001 Covilhã                      Fax:   +351 275319732
Portugal

mailto:[email-masked]
http://www.ci.uc.pt/logtalk/pmoura.html
-----------------------------------------------------------