24 lines
705 B
Plaintext
24 lines
705 B
Plaintext
:- object(exceptions).
|
|
|
|
:- public(double/2).
|
|
double(X, Y) :-
|
|
catch(double_it(X,Y), Error, handler(Error, Y)).
|
|
|
|
handler(error(not_a_number(X), logtalk(This::double(X,Y), Sender)), Y) :-
|
|
% try to fix the error and resume computation;
|
|
% if not possible, rethrow the exception
|
|
( catch(number_codes(Nx, X), _, fail) ->
|
|
double_it(Nx, Y)
|
|
; throw(error(not_a_number(X), logtalk(This::double(X,Y), Sender)))
|
|
).
|
|
|
|
double_it(X, Y) :-
|
|
( number(X) ->
|
|
Y is 2*X
|
|
; this(This),
|
|
sender(Sender),
|
|
throw(error(not_a_number(X), logtalk(This::double(X,Y), Sender)))
|
|
).
|
|
|
|
:- end_object.
|