You can extend the Prolog clause using the built-in predicate clause/2. This predicate expands the sentence as a hygiene macro :
:- initialization(main).
main :- clause(is_between(1,2,3),B),writeln(B).
is_between(A,B,C) :- A<B,C>B.
This example is printed 1<2,3>2.
, findall/3 :
:- initialization(main).
main :- find_all_clauses(is_between(1,2,3),B),writeln(B).
find_all_clauses(Predicate,Output) :-
findall(Predicate1,clause(Predicate,Predicate1),Output1),
list_to_disjunction(Output1,Output).
list_to_disjunction([A],A).
list_to_disjunction([A|B],(A;B1)) :- list_to_disjunction(B,B1).
is_between(A,B,C) :- A<B,C>B.
is_between(A,B,C) :- B>A,B<C.
1<2,3>2;2>1,2<3.
, . , logen.