1:- module(pathlang,
2 []). 3
4prim_goal(Pred, X, Y, Goal) :-
5 var(Pred),
6 !,
7 Goal = rdf(X, PredIRI, Y).
8prim_goal(inverse(Pred), X, Y, Goal) :-
9 !,
10 prim_goal(Pred, Y, X, Goal).
11prim_goal(Pred, X, Y, Goal) :-
12 rdf_global_id(Pred,PredIRI),
13 rdf_is_iri(PredIRI),
14 !,
15 Goal = rdf(X, PredIRI, Y).
16prim_goal(Pred, X, Y, Goal) :-
17 !,
18 Goal =.. [Pred, X, Y].
19
20eval( A -> B, Goal ) :-
21 22 eval( A, B, Goal ).
23
24eval( A, B -> C, (Goal, Goal2) ) :-
25 26 \+ compound(B),
27 !,
28 prim_goal(B, A, Out, Goal),
29 eval(Out, C, Goal2).
30
31eval( A, B -> C, (Goal, Goal2) ) :-
32 33 compound(B),
34 !,
35 B =.. [Pred, Out],
36 prim_goal(Pred, A, Out, Goal),
37 eval(Out, C, Goal2).
38
39eval( A, (B,C), (Goal, Goal2) ) :-
40 !,
41 eval(A, B, Goal),
42 eval(A, C, Goal2).
43
44eval( A, (B | C), (Goal ; Goal2) ) :-
45 !,
46 eval(A, B, Goal),
47 eval(A, C, Goal2)