:- module(p1, [ e1/2, e2/2, e3/2 ]). :- use_module(library(neck)). :- use_module(library(lists)). :- init_expansors. q1(1, a). q1(2, b). q1(3, c). a1(H) :- functor(H, f, 2), arg(1, H, g(A)), arg(2, H, h(A)), A is sqrt(2), neck. a2(H) :- member(X, [1,2,3]), neck, a3(X, H). a3(_, _). e1(A, F) :- q1(A, B), upcase_atom(B, U), neck, p2(U, C), p3(C, D), p2(D, E), p3(E, F). e1(A, F) :- q1(A, B), neck, !, p2(B, C), p3(C, D), p2(D, E), p3(E, F). e1(A, F) :- q1(A, B), neck, p2(B, C), p3(C, D), !, p2(D, E), p3(E, F). e1(A, D) :- q1(B, A), neck, p2(B, C), p3(C, D). e2(A, C) :- q1(A, B), neck, p2(B, C). e3(A, B) :- q1(A, B), neck. % Next clause must trigger a performance warning, but not an error: e4(A, A) :- neck. p2(A, A). p3(A, A).