/****************************************
'**index' Ȥʤѹ

		ICOT SANO,H
		August 2, 1992


'**index' 򥳥ȥ

'*append'(Str,Rest,IN),
  ==>  '*append'(Str,Out,In),!.
****************************************/

/*****************************/
/* xg parser and goal clause */
/*****************************/

% *depth_check
'*depth_check'(_,[]) :- !.
'*depth_check'(x(_,_,_,X1),x(_,_,_,X2)) :-
   '*depth_check'(X1,X2).

% goal
goal(G,A,T,S0,S) :-
 ( '**fail_goal'(G,S0),!,fail ; '**wf_goal'(G,S0,_,_,_) ),!,
   '**wf_goal'(G,S0,A,S,T).
goal(G,A,T,S0,S) :-
   dictionary(C,A1,T1,S0,S1),
   Link=..[C,G],
   call(Link),
   P=..[C,G,A1,AA,T1,T,[],[],[],S1,S],
   call(P),
   assertz('**wf_goal'(G,S0,AA,S,T)),
   A=AA.
goal(G,A,T,S0,S) :-
 ( '**wf_goal'(G,S0,_,_,T) ; assertz('**fail_goal'(G,S0)) ),!, fail.

% goal_x
goal_x(G,A,T,X0,X,S0,S) :-
 ( '**fail_goal'(G,S0,X0),!,fail ; '**wf_goal'(G,S0,X0,_,_,_,_)),!,
   '**wf_goal'(G,S0,X0,A,X,S,T).
goal_x(G,A,T,X0,X,S0,S) :-
   dictionary(C,A1,T1,S0,S1),
   Link=..[C,G],
   call(Link),
   P=..[C,G,A1,AA,T1,T,X0,X0,X,S1,S],
   call(P),
   assertz('**wf_goal'(G,S0,X0,AA,X,S,T)),
   A=AA.
goal_x(G,A,T,X0,X,S0,S) :-
   X0=x(XCAT,XARG,XTREE,X1),
   Link=..[XCAT,G],
   call(Link),
   P=..[XCAT,G,XARG,AA,XTREE,T,X0,X1,X,S0,S],
   call(P),
   assertz('**wf_goal'(G,S0,X0,AA,X,S,T)),
   A=AA.
goal_x(G,A,T,X0,X,S0,S) :-
 ( '**wf_goal'(G,S0,X0,_,_,_,_); assertz('**fail_goal'(G,S0,X0)) ),!, fail.

% terminal
terminal(Str,In,Out) :-
%   '**index'(In,IN),
   '*append'(Str,Out,In),!.
%   '**index'(Out,Rest),!.
