Mercurial > hg > Applications > Tokio
diff tg.pl @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tg.pl Thu Aug 30 14:57:44 2007 +0900 @@ -0,0 +1,94 @@ +/* + Copyright (C) 1988,2005, Shinji Kono + Everyone is permitted to copy and distribute verbatim copies + of this license, but changing it is not allowed. You can also + use this wording to make the terms for other programs. + + send your comments to kono@ie.u-ryukyu.ac.jp +*/ + +/* + + Tokio to prolog compiler + One line compiler + Mon Jun 18 16:09:07 JST 1990 + $Header$ +*/ + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Main Loop +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +(tokio) :- repeat, init_static, nl, + display('tokio: '), ttyflush, + read(G), r_tokio_loop(G). +r_tokio_loop(end_of_file) :- !. +r_tokio_loop(G) :- r_goal(G), + !,fail. + +% Now main loop becomes one line compiler in tg.pl +% +% tokio(Goals) :- init_static, +% copy(Goals, G), 'r_tokio0'(G), +% Goals = G. + +tokio(Goals) :- init_static, + r_goal(Goals). + +% +% call '$g$g$g'(Varlists) +% +r_goal(Goal) :- + r_goals_retract, + get_variable(Goal,Vlist,[],_,0,Vcount), + functor(GGG, '$g$g$g', Vcount), + get_variable(GGG,Vlist,[],_,0,_),!, + preprocess((GGG :- Goal),Processed), + r_goal1(GGG,Processed). + +% success on compiler failuer +r_goal1(_GGG,Processed) :- + r_goals(Processed),!,r_goals_retract. +% Then execute goal +r_goal1(GGG,_Processed) :- + 'r_tokio0'(GGG),r_goals_retract. +% Real Fail +r_goal1(_GGG,_Processed) :- r_goals_retract,fail. + +r_goals((X,_Y)) :- r_goals(X). % fail and fall into next line +r_goals((_X,Y)) :- !,r_goals(Y). +r_goals(X) :- + recorda('r_assert',on,Ref), + c_clause(X, C), % clitical on asserting clause + erase(Ref), + assert_clause(C),!, fail. % to reduce stack +r_goals(X) :- + c_error((nl,write('compiler error on '),write(X),nl)). + +r_goals_retract :- recorded('r_run',XXX,Ref),erase(Ref),retract(XXX),fail. +r_goals_retract. + +c_melt('$VAR'(N), Var, Vs) :- !, + c_nlist(N,Var,Vs). +c_melt([X|TX], [XX|TXX], Vs) :- + c_melt(X,XX,Vs),c_melt(TX,TXX,Vs). +c_melt('$t'(X,TX), '$t'(XX,TXX), Vs) :- + c_melt(X,XX,Vs),c_melt(TX,TXX,Vs). +c_melt(X, XX, Vs) :- + functor(X, F, A), + functor(XX, F, A), + c_melt_args(0, A, X, XX, Vs),!. + +c_melt_args(N, N, _X, _, _) :- !. +c_melt_args(K, N, X, XX, Vs) :- + K1 is K+1, + arg(K1, X, XK), + arg(K1, XX,XXK), + c_melt(XK, XXK, Vs), + c_melt_args(K1, N, X, XX, Vs). + +c_nlist(0,V,[V|_]) :-!. +c_nlist(N,V,[_|T]) :- + N1 is N-1, + c_nlist(N1,V,T). + +/* */