Explain/1 with hyperlinks

I really never used explain/1, but now with the nicer messages and the recent addition of hyperlinks I find it quite useful:

If you have code like this:

some_widely_used_pred :-
    print(hi).

another_pred :-
    some_widely_used_pred.

yet_another_pred :-
    print(doing_something_else),
    some_widely_used_pred.

you can run:

1 ?- explain(some_widely_used_pred).
% some_widely_used_pred is an atom
% user:some_widely_used_pred/0 is a predicate defined in /tmp/t.pl:2
%     Referenced from 1-th clause of user:another_pred/0 at /tmp/t.pl:5
%     Referenced from 1-th clause of user:yet_another_pred/0 at /tmp/t.pl:8
true.

If you have hyperlinks enabled, in your terminal, you can click on /tmp/t.pl:2 or any of the other references and it will open up in the editor. Quite useful also to see where a predicate is used from the toplevel, especially when you are planning to change some_widely_used_pred and you want to see what will be affected. I like the new colors too! :grinning:

I just added to some of my commonly used abbreviations in my init.pl file:

[...]
z         :- shell(bash).
z(C)      :- format(atom(C1), "sh -c '~w'",[C]), shell(C1).
h(H)      :- help(H).
a(A)      :- apropos(A).
f(F,As)   :- format(F,As).
uml(Mod)  :- use_module(library(Mod)).
pp(A)     :- print_term(A,[right_margin(90)]).
ex(T)     :- explain(T).
[...]
3 Likes