2
|
1 /*
|
|
2 Copyright (C) 1991, Shinji Kono, Sony Computer Science Laboratory, Inc.
|
|
3 The University, Newcastle upton Tyne
|
|
4
|
|
5 Everyone is permitted to copy and distribute verbatim copies
|
|
6 of this license, but changing it is not allowed. You can also
|
|
7 use this wording to make the terms for other programs.
|
|
8
|
|
9 send your comments to kono@csl.sony.co.jp
|
22
|
10 $Id: exdev.pl,v 1.2 2007/08/30 05:16:36 kono Exp $
|
2
|
11 */
|
|
12
|
|
13 % develop Local ITL formula into state diagram
|
|
14 %
|
|
15 % Mon May 20 17:24:23 BST 1991
|
|
16 % require([chop]).
|
|
17
|
|
18 :-dynamic verbose/0,state/2,links/2.
|
|
19 :-dynamic stay/3.
|
|
20
|
|
21 :-assert(verbose).
|
|
22 verbose(off) :- retract(verbose),fail;true.
|
|
23 verbose(on) :- asserta(verbose).
|
|
24
|
|
25 deve(ITL) :-
|
|
26 init,!,
|
|
27 expand(ITL,ITL0), % chop standard form
|
|
28 itlstd(ITL0,StdNOW), % BDT
|
|
29 assert(itl_state(StdNOW,1)),!, % Initial State
|
|
30 deve0((1,ITL0)).
|
|
31
|
|
32 deve0((S,ITL)) :-
|
|
33 % increment_state(ITL,ITL_1,S),
|
|
34 show_state(S,ITL),
|
|
35 % setof(Next,itldecomp(ITL,Next,S),
|
|
36 bagof(Next,itldecomp(ITL,Next,S),
|
|
37 Nexts),!,
|
|
38 deve1(Nexts).
|
|
39 deve0(_).
|
|
40
|
|
41 deve1([]).
|
|
42 deve1([H|T]) :- deve0(H),deve1(T).
|
|
43
|
|
44 itldecomp(ITL,(NextS,Next),From) :-
|
|
45 init_var(current,From),
|
|
46 itl(ITL,Next,Cond),
|
|
47 %% showing
|
|
48 itlshow(Next,NextS,Cond,From).
|
|
49
|
|
50 itlshow(Next,S,Cond,From):-
|
|
51 itlstd(Next,StdNext),
|
|
52 check_state(StdNext,Cond,New,S),
|
|
53 inc_var(itl_transition,_),
|
|
54 assertz(state(From,Cond,S)),
|
|
55 (links(S,From),!;assertz(links(S,From))),
|
|
56 !,
|
|
57 itlshow0(S,Cond,Next,New).
|
|
58
|
|
59 itlshow0(S,Cond,Next,New) :- verbose,!,
|
|
60 itlshow1(S,Cond,Next,New),nl,!,New=1.
|
|
61 itlshow0(0,_,_,0):- !,put(101),!,fail. % "e"
|
|
62 itlshow0(false,_,_,0):- !,put(102),!,fail. % "f"
|
|
63 itlshow0(true,_,_,0):- !,put(116),!,fail. % "t"
|
|
64 itlshow0(_,_,_,0):- !,put(46),!,fail. % "."
|
|
65 itlshow0(S,_,_,1):- !,write(S),put(46),ttyflush,!. % "."
|
|
66
|
|
67 itlshow1(0,Cond,_,_):-!,
|
|
68 write(Cond),write('->'),write(empty).
|
|
69 itlshow1(true,Cond,_,_):-!,
|
|
70 write(Cond),write('->'),write(true).
|
|
71 itlshow1(false,Cond,_,_):-!,
|
|
72 write(Cond),write('->'),write(false).
|
|
73 itlshow1(S,Cond,_,0):-!,
|
|
74 write(Cond),write('->'),write(S).
|
|
75 itlshow1(S,Cond,Org,1):-
|
|
76 write(Cond),write('->'),write(S),
|
|
77 put(9),write(Org),!.
|
|
78
|
|
79 init :-
|
|
80 subterm_init,
|
20
|
81 r_abolish(state,3),
|
2
|
82 asserta(state(true,[more],true)),
|
|
83 asserta(state(true,[empty],0)),
|
20
|
84 r_abolish(itl_state,2),
|
|
85 r_abolish(stay,3),asserta(stay(0,0,0)),
|
2
|
86 asserta(itl_state(false,false)),
|
|
87 asserta(itl_state(empty,0)),
|
|
88 asserta(itl_state(true,true)),
|
20
|
89 r_abolish(links,2),asserta(links(true,true)),
|
2
|
90 init_var(itl_transition,1),
|
|
91 init_var(itl_state_number,1),!.
|
|
92
|
|
93 show_state(S,ITL) :-
|
|
94 nl,write('state('),write(S), % (
|
|
95 (verbose,write(' , '), write(ITL),write(')'),nl;write(')')),!.
|
|
96
|
|
97 check_state(true,[more |_],0,true):-!.
|
|
98 check_state(true,[empty|_],0,0):-!.
|
|
99 check_state(false,_,0,false):-!.
|
|
100 check_state(STD,_,0,S):-
|
|
101 itl_state(STD,S),!.
|
|
102 check_state(STD,_,1,S):-
|
|
103 inc_var(itl_state_number,S),
|
|
104 assert(itl_state(STD,S)),!.
|
|
105
|
|
106 init_var(X,_) :- functor(F,X,1),assert(F),fail.
|
|
107 init_var(X,_) :- functor(F,X,1),retract(F),fail.
|
|
108 init_var(X,V) :- functor(F,X,1),arg(1,F,V),assert(F),!.
|
|
109 inc_var(Name,X1) :-
|
|
110 functor(F,Name,1),retract(F),arg(1,F,X),
|
|
111 X1 is X+1,functor(F1,Name,1),arg(1,F1,X1),
|
|
112 asserta(F1),!.
|
|
113
|
|
114 %init_var(X,_) :- recorded(X,_,Ref),erase(Ref),fail.
|
|
115 %init_var(X,V) :- recorda(X,V,_).
|
|
116 %inc_var(Name,X1) :-
|
|
117 % recorded(Name,X,Ref),X1 is X+1,
|
|
118 % erase(Ref),recorda(Name,X1,_).
|
|
119
|
|
120 increment_state(stay(P,now),stay(P,S),S) :- !,
|
|
121 (stay(P,F,S);assertz(stay(P,F,S))),!.
|
|
122 increment_state(N,N,_) :- atomic(N),!.
|
|
123 increment_state(P,R,S) :- functor(P,H,N),functor(R,H,N),
|
|
124 increment_state_arg(N,P,R,S).
|
|
125 increment_state_arg(0,_P,_R,_):-!.
|
|
126 increment_state_arg(N,P,R,S):-arg(N,P,PA),arg(N,R,RA),
|
|
127 N1 is N-1,increment_state(PA,RA,S),
|
|
128 increment_state_arg(N1,P,R,S).
|
|
129
|
|
130 /* end */
|