Note that the error numbers should not be hard-coded in subsequent calls to error/2 etc., as the error numbers are arranged at run time and may be changed between releases.
Success: define_error("my first error message",N). (gives N=340). define_error("my second error message",N). (gives N=341). [eclipse]: [user]. :- define_error("1st arg should be number",N), setval(usererror, N). do(N,Res) :-(number(N) -> Res is sqrt(N) ; getval(usererror, Err), error(Err, do(N,Res))). user compiled 232 bytes in 0.00 seconds yes. [eclipse]: do(4,2.0). yes. [eclipse]: do(four,2.0). 1st arg should be number in do(four, 2.0) Error: define_error(M,N). (Error 4). define_error(atom,N). (Error 5). define_error("incorrect module",340). (Error 5).