annotate tg.pl @ 4:f864bb4ba9a4 default tip

update tags
author convert-repo
date Fri, 07 Nov 2008 20:36:52 +0000
parents cfb7c6b24319
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
1 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
2 Copyright (C) 1988,2005, Shinji Kono
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
3 Everyone is permitted to copy and distribute verbatim copies
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
4 of this license, but changing it is not allowed. You can also
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
5 use this wording to make the terms for other programs.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
6
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
7 send your comments to kono@ie.u-ryukyu.ac.jp
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
8 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
9
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
10 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
11
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12 Tokio to prolog compiler
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13 One line compiler
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14 Mon Jun 18 16:09:07 JST 1990
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15 $Header$
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19 % Main Loop
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 (tokio) :- repeat, init_static, nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22 display('tokio: '), ttyflush,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23 read(G), r_tokio_loop(G).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 r_tokio_loop(end_of_file) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25 r_tokio_loop(G) :- r_goal(G),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26 !,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28 % Now main loop becomes one line compiler in tg.pl
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 % tokio(Goals) :- init_static,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31 % copy(Goals, G), 'r_tokio0'(G),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32 % Goals = G.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34 tokio(Goals) :- init_static,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 r_goal(Goals).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38 % call '$g$g$g'(Varlists)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 r_goal(Goal) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41 r_goals_retract,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 get_variable(Goal,Vlist,[],_,0,Vcount),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43 functor(GGG, '$g$g$g', Vcount),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 get_variable(GGG,Vlist,[],_,0,_),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45 preprocess((GGG :- Goal),Processed),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46 r_goal1(GGG,Processed).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48 % success on compiler failuer
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 r_goal1(_GGG,Processed) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 r_goals(Processed),!,r_goals_retract.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51 % Then execute goal
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 r_goal1(GGG,_Processed) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53 'r_tokio0'(GGG),r_goals_retract.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54 % Real Fail
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55 r_goal1(_GGG,_Processed) :- r_goals_retract,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57 r_goals((X,_Y)) :- r_goals(X). % fail and fall into next line
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58 r_goals((_X,Y)) :- !,r_goals(Y).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59 r_goals(X) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 recorda('r_assert',on,Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61 c_clause(X, C), % clitical on asserting clause
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62 erase(Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 assert_clause(C),!, fail. % to reduce stack
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64 r_goals(X) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 c_error((nl,write('compiler error on '),write(X),nl)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
67 r_goals_retract :- recorded('r_run',XXX,Ref),erase(Ref),retract(XXX),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
68 r_goals_retract.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
69
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
70 c_melt('$VAR'(N), Var, Vs) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
71 c_nlist(N,Var,Vs).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
72 c_melt([X|TX], [XX|TXX], Vs) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
73 c_melt(X,XX,Vs),c_melt(TX,TXX,Vs).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
74 c_melt('$t'(X,TX), '$t'(XX,TXX), Vs) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
75 c_melt(X,XX,Vs),c_melt(TX,TXX,Vs).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
76 c_melt(X, XX, Vs) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
77 functor(X, F, A),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
78 functor(XX, F, A),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
79 c_melt_args(0, A, X, XX, Vs),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
80
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
81 c_melt_args(N, N, _X, _, _) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
82 c_melt_args(K, N, X, XX, Vs) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
83 K1 is K+1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
84 arg(K1, X, XK),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
85 arg(K1, XX,XXK),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
86 c_melt(XK, XXK, Vs),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
87 c_melt_args(K1, N, X, XX, Vs).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
88
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
89 c_nlist(0,V,[V|_]) :-!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
90 c_nlist(N,V,[_|T]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
91 N1 is N-1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
92 c_nlist(N1,V,T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
93
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
94 /* */