-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathflatnames.pl
61 lines (53 loc) · 1.27 KB
/
flatnames.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
:- module(flatnames, [flat_name/2,
flat_flatname/2,
flat_flatnames/2,
indexed_flatname/4,
initial_flatquery/2,
flatten_denotes/2], [assertions, isomodes, doccomments]).
:- use_module(library(lists)).
:- use_module(builtins).
flat_name(A,A) :-
sp_builtin(A),
!.
flat_name(A,A1) :-
nonvar(A),
A =.. [F,As],
nonvar(As),
!,
As =.. [G|Args],
name(F,Fn),
name(G,Gn),
append(Gn,[0'_|Fn],An),
name(H,An),
A1 =.. [H|Args].
flat_name(A,A).
flat_flatname(ans(true),true) :-
!.
flat_flatname(ans(call(A)),A) :- % calls to builtins are treated differently
!.
flat_flatname(X,Y) :-
flat_name(X,Z),
flat_name(Z,Y).
flat_flatnames((B,Bs),(B1,Bs1)) :-
!,
flat_flatname(B,B1),
flat_flatnames(Bs,Bs1).
flat_flatnames(B,B1) :-
flat_flatname(B,B1).
indexed_flatname(Q,I,J,Qij) :-
Q1 =.. [Q,J],
flat_name(Q1,Qj),
Q2 =.. [Qj,I],
flat_name(Q2,Qij).
initial_flatquery(Q,QQ) :-
indexed_flatname(query,0,0,Q0),
Qinit =.. [Q0,Q],
flat_name(Qinit,QQ).
flatten_denotes(denotes(T,V),Den) :-
T =.. [F|Xs],
name(denotes,Dn),
name(F,Fn),
append(Dn,[0'_|Fn],DFn),
name(DF,DFn),
append(Xs,[V],Ys),
Den =.. [DF|Ys].