annotate kiss.pl @ 22:29cf617f49db default tip

newer CVS version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 22 Apr 2016 16:47:13 +0900
parents 07d6c4c5654b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
1 /*
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
2 Copyright (C) 1991, Shinji Kono, Sony Computer Science Laboratory, Inc.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
3 The University, Newcastle upton Tyne
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
4
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
5 Everyone is permitted to copy and distribute verbatim copies
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
6 of this license, but changing it is not allowed. You can also
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
7 use this wording to make the terms for other programs.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
8
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
9 send your comments to kono@csl.sony.co.jp
22
29cf617f49db newer CVS version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
10 $Id: kiss.pl,v 1.3 2007/08/30 05:16:36 kono Exp $
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
11 */
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
12
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
13 % :- dynamic st_variables/2.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
14
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
15 set_input_var(L) :- r_abolish(input_variable_list,1),
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
16 asserta(input_variable_list(L)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
17
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
18 kiss :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
19 (variable_list(L);L=[]),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
20 (st_variables(In,_);In=[]),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
21 delete(L,In,Out),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
22 write('# '),write_kiss_var_list(In),write((->)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
23 write_kiss_var_list(Out),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
24 % write('.v '),length(L,Ll),write(Ll),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
25 write('.p '),itl_transition(X),write(X),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
26 write('.s '),itl_state_number(Y),write(Y),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
27 write('.i '),length(In,Inl),write(Inl),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
28 write('.o '),length(Out,Outl),write(Outl),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
29 kiss(In,Out).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
30
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
31 kiss(In,Out) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
32 state(S,Cond,D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
33 write_kiss(S,Cond,D,In,Out),fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
34 kiss(_,_) :- write('.e'),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
35
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
36 write_kiss_var_list([]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
37 write_kiss_var_list([H|L]):-!,write(H),put(32), % " "
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
38 write_kiss_var_list(L).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
39
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
40 write_kiss(S,Cond,D,In,Out) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
41 write_kiss_var(In,Cond),put(32), % " "
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
42 write_kiss_state(S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
43 write_kiss_state(D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
44 write_kiss_var(Out,Cond),nl,!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
45
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
46 write_kiss_state(0) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
47 write(se),put(9).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
48 write_kiss_state(true) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
49 write(st),put(9).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
50 write_kiss_state(false) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
51 write(sf),put(9).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
52 write_kiss_state(S) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
53 write(s),write(S),put(9).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
54
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
55 delete([],_,[]) :-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
56 delete([H|X],L,Y) :- member(H,L),!,delete(X,L,Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
57 delete([H|X],L,[H|Y]) :- delete(X,L,Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
58
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
59 write_kiss_var([],_):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
60 write_kiss_var([H|L],Cond) :- member(H,Cond),!,write(1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
61 write_kiss_var(L,Cond).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
62 write_kiss_var([H|L],Cond) :- member(not(H),Cond),!,write(0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
63 write_kiss_var(L,Cond).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
64 write_kiss_var([_|L],Cond) :- write(-),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
65 write_kiss_var(L,Cond).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
66
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
67 tgen :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
68 (variable_list(L);L=[]),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
69 (st_variables(In,_);In=[]),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
70 delete(L,In,Out),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
71 write(('?-'(static(L)))),put(46),nl, % "."
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
72 make_print_state(L,L1,LL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
73 write((print_state :- L1,write(LL))),put(46),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
74 tgen(In,Out).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
75 tgen(In,Out) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
76 state(S,Cond,D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
77 write_tclause(S,Cond,D,In,Out),fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
78 tgen(_,_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
79
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
80 make_print_state([H],(H1= *(H)),((H) = H1)):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
81 make_print_state([H|L],((H1= *(H)),L1),(((H) = H1),LL1)):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
82 make_print_state(L,L1,LL1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
83
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
84 write_tclause(S,[empty|Cond],true,In,Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
85 write_tstate(S), write(' :- '), % write(empty),put(44), % ","
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
86 write_tcondition(In,Out,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
87 write(true), put(46),nl. % true, empty or false "."
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
88 write_tclause(_S,[empty|_Cond],false,_In,_Out) :-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
89 %write_tclause(S,[empty|Cond],false,In,_Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
90 % write_tstate(S), write(' :- '),write(empty),put(44),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
91 % write_tcondition(In,[],Cond), % don't touch output
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
92 % write(fail),put(46),nl. % true, empty or false
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
93 write_tclause(S,[empty|Cond],D,In,Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
94 write_tstate(S), write(' :- '), % write(empty),put(44), % ","
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
95 write_tcondition(In,Out,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
96 write_tstate(D),put(46),nl. % true, empty or false "."
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
97 write_tclause(_S,[more|_Cond],false,_In,_Out) :-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
98 %write_tclause(S,[more|Cond],false,In,_Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
99 % write_tstate(S), write(' :- '),write(more),put(44), % ","
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
100 % write_tcondition(In,[],Cond), % don't touch output
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
101 % write(fail), put(46),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
102 write_tclause(S,[more|Cond],true,In,Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
103 write_tstate(S), write(' :- '),write(more),put(44),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
104 write_tcondition(In,Out,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
105 write(true), put(46),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
106 write_tclause(S,[more|Cond],D,In,Out) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
107 write_tstate(S), write(' :- '),write(more),put(44),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
108 write_tcondition(In,Out,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
109 write((@)),write_tstate(D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
110 put(46),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
111
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
112 write_tcondition(In,Out,Cond) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
113 write_tvar(In,Cond,'= '),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
114 write_tvar(Out,Cond,':= ').
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
115 write_tvar([],_,_):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
116 write_tvar([H|L],Cond,Eq) :- member(H,Cond),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
117 write(*(H)),write(Eq),write(1),put(44),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
118 write_tvar(L,Cond,Eq).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
119 write_tvar([H|L],Cond,Eq) :- member(not(H),Cond),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
120 write(*(H)),write(Eq),write(0),put(44),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
121 write_tvar(L,Cond,Eq).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
122 write_tvar([_|L],Cond,Eq) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
123 write_tvar(L,Cond,Eq).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
124
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
125 write_tstate(0) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
126 write(empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
127 write_tstate(true) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
128 write(true).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
129 write_tstate(false) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
130 write(fail).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
131 write_tstate(S) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
132 write(s),write(S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
133
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
134 /*
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
135
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
136 KISS2 format
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
137
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
138 .i 4
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
139 .o 2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
140 .p 60
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
141 .s 10
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
142 --01 st0 st0 00
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
143
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
144 */
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
145
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
146 read_kiss(File) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
147 read_kiss(File,empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
148
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
149 read_kiss(File,Emode) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
150 see(File),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
151 get0(C), read_kiss_header(C,C1,IL,OL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
152 nonvar(IL),nonvar(OL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
153 make_vars(IL,"i",0,In),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
154 make_vars(OL,"o",0,Out),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
155 init_read_kiss(In,Out,IL,OL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
156 read_kiss_body(C1,In,Out,Emode),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
157 seen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
158 read_kiss(_,_) :- write('Error'),nl,seen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
159
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
160 make_vars(N,_,_,[]) :- N =< 0,!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
161 make_vars(N,V,M,[H|L]) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
162 name(M,LM),append(V,LM,LH), name(H,LH),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
163 N1 is N-1,M1 is M+1,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
164 make_vars(N1,V,M1,L).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
165
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
166 read_kiss(File,In,Out,Emode) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
167 see(File),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
168 read_kiss(In,Out,Emode),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
169 seen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
170 read_kiss(_,_,_,_) :- write('Error'),nl,seen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
171
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
172 read_kiss(In,Out,Emode) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
173 get0(C), read_kiss_header(C,C1,IL1,OL1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
174 ((var(In),make_vars(IL1,"i",0,In));true),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
175 ((var(Out),make_vars(OL1,"o",0,Out));true),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
176 init_read_kiss(In,Out,IL,OL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
177 check_vars(IL,OL,IL1,OL1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
178 read_kiss_body(C1,In,Out,Emode).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
179
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
180 init_read_kiss(In,Out,IL,OL) :-
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
181 r_abolish(st_variables,2),
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
182 r_abolish(st,3),
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
183 assert(st_variables(In,Out)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
184 assert(st(true,true,true)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
185 length(In,IL),length(Out,OL).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
186
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
187 check_vars(IL,0,IL,_) :-!. % ignore output
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
188 check_vars(IL,OL,IL,OL) :-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
189 check_vars(IL,_OL,IL1,_OL1) :-IL=\=IL1,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
190 write('Input variable number is wrong'),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
191 check_vars(_IL,OL,_IL1,OL1) :-OL=\=OL1,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
192 write('Output variable number is wrong'),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
193
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
194 read_kiss_header(C,C2,IL,OL) :-[C]=".",!, get(C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
195 read_kiss_header1(C0,C1,IL,OL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
196 read_kiss_header(C1,C2,IL,OL).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
197 read_kiss_header(C,C,_,_) :-([C]="0";[C]="1";[C]="-"),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
198 read_kiss_header(C,C1,IL,OL) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
199 skip_line(C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
200 read_kiss_header(C0,C1,IL,OL).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
201
19
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
202 read_kiss_header1(C,C2,IL,_OL):-[C]="i",!,get(C0),
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
203 read_number(C0,C1,IL),skip_line(C1,C2).
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
204 read_kiss_header1(C,C2,_IL,OL):-[C]="o",!,get(C0),
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
205 read_number(C0,C1,OL),skip_line(C1,C2).
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
206 read_kiss_header1(C,C1,_,_):-[C]="p",!,
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
207 skip_line(C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
208 read_kiss_header1(C,C1,_,_):-[C]="s",!,
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
209 skip_line(C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
210 read_kiss_header1(C,C1,_,_):-
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
211 skip_line(C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 2
diff changeset
212
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
213 read_kiss_body(-1,_,_,_) :-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
214 read_kiss_body(C,In,Out,Emode) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
215 ([C]="0";[C]="1";[C]="-"),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
216 read_kiss_var(In ,C, _, In1),get(C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
217 read_kiss_state(C1,C2,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
218 read_kiss_state(C2,C3,D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
219 read_kiss_var(Out,C3,C4,Out1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
220 assert_state(Emode,S,In1,Out1,D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
221 skip_line(C4,C5),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
222 read_kiss_body(C5,In,Out,Emode).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
223 read_kiss_body(C,In,Out,Emode) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
224 skip_line(C,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
225 read_kiss_body(C1,In,Out,Emode).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
226
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
227 assert_state(_,S,In1,Out1,D) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
228 st(S,_,_),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
229 assertz(st(S,(In1,Out1),D)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
230 assert_state(empty,S,In1,Out1,D) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
231 assertz(st(S,empty,empty)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
232 assertz(st(S,(In1,Out1),D)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
233 assert_state(_,S,In1,Out1,D) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
234 assertz(st(S,(In1,Out1),D)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
235
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
236 read_kiss_var([],C, C, true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
237 read_kiss_var([_],C, C1, true):- [C]="-",!,get0(C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
238 read_kiss_var([H],C, C1, not(H)):- [C]="0",!,get0(C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
239 read_kiss_var([H],C, C1, H):- [C]="1",!,get0(C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
240 read_kiss_var([H|L],C, C1, O):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
241 kiss_var([C],H,O,O1),!,get0(C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
242 read_kiss_var(L,C0,C1,O1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
243 read_kiss_var(L,_, C1, O):- get0(C),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
244 read_kiss_var(L,C, C1, O).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
245
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
246 kiss_var("-",_,O,O).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
247 kiss_var("0",H,(not(H),O),O).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
248 kiss_var("1",H,(H,O),O).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
249
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
250 read_number(C,C1,N) :- read_number1(C,C1,NL),name(N,NL).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
251 read_number(_,_,0) :- write('A number is expected.'),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
252 read_number1(C,C1,[C|L]) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
253 ([C]="0"; [C]="1"; [C]="2"; [C]="3"; [C]="4"; [C]="5";
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
254 [C]="6"; [C]="7"; [C]="8"; [C]="9"),!,get0(C2),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
255 read_number1(C2,C1,L).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
256 read_number1(C,C,[]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
257
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
258 read_kiss_state(C,C1,N) :- read_kiss_state1(C,C1,NL),name(N,NL).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
259 read_kiss_state(_,_,0) :- write('A kiss_state is expected.'),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
260 read_kiss_state1(C,C1,[C|L]) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
261 [Z]="0",C>=Z, !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
262 get0(C2),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
263 read_kiss_state1(C2,C1,L).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
264 read_kiss_state1(C,C1,[]) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
265 skip_space(C,C1),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
266
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
267 skip_space(C,C1):- ([C]=[32];[C]=[9]),!,
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
268 get(C0),skip_space(C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
269 skip_space(C,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
270
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
271 skip_line(10,C) :- !,get0(C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
272 skip_line(-1,C) :- !,C= -1.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
273 skip_line(_,C) :- get0(C0),skip_line(C0,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
274
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
275 /* end */