Asia x3
Asia x3

Reputation: 616

Prolog error arguments

I'm wondering how to go about adding error checking in Prolog. For instance I have a program that will find how long a list is:

listlen([],0). 
listlen([_|T],N) :-
   listlen(T,X),
   N is X+1.

How would I print out an error like "The 1st argument has to be a list" when it happens?

Upvotes: 6

Views: 1284

Answers (1)

user1812457
user1812457

Reputation:

SWI-Prolog has ISO-compliant exception handling, so you can actually throw errors as defined in the standard.

?- throw(error(type_error(list, foo), context(foo/0, 'Must be a list'))).
ERROR: foo/0: Type error: `list' expected, found `foo' (an atom) (Must be a list)

This is not only difficult to type/use: it is also implementation dependent. Instead, you can (and should) use library(error), which provides the must_be/2 predicate (sadly, it is very difficult to find this on the SWI-Prolog website if you don't know what you are looking for):

?- must_be(list, [foo]).
true.

?- must_be(list, foo).
ERROR: Type error: `list' expected, found `foo' (an atom)

I assume that other Prolog implementations that support exception handling provide very similar facilities.

Upvotes: 3

Related Questions