You selected autom2.pl
title(0,'% ****************************************** ').
title(1,'% Prolog によるオートマトンの実現').
title(2,'% 経営システム科学 ジュース販売機の例題').
title(3,'% 例題の参照文献:').
title(4,'% 猪平ら,『インターネット時代の情報管理概論』,共立出版.').
title(5,'% created: Apr 2002; modified: Feb 2003, 17 Jan 2008. ').
'状態集合'(['100円表示','50円表示','0円表示']).
'入力集合'(['100円','50円','0円']).
'出力集合'(['ジュース']).
'販売価格'(['150円']).
'状態遷移関数'('状態'('0円表示'), '状態'('0円表示'), '入力'('0円')).
'状態遷移関数'('状態'('50円表示'),'状態'('0円表示'), '入力'('50円')).
'状態遷移関数'('状態'('100円表示'), '状態'('0円表示'), '入力'('100円')).
'状態遷移関数'('状態'('50円表示'), '状態'('50円表示'), '入力'('0円')).
'状態遷移関数'('状態'('100円表示'), '状態'('50円表示'), '入力'('50円')).
'状態遷移関数'('状態'('0円表示'), '状態'('50円表示'), '入力'('100円')).
'状態遷移関数'('状態'('100円表示'), '状態'('100円表示'), '入力'('0円')).
'状態遷移関数'('状態'('0円表示'), '状態'('100円表示'), '入力'('50円')).
'状態遷移関数'('状態'('0円表示'), '状態'('100円表示'), '入力'('100円')).
'出力関数'('出力'('なし') , '状態'('0円表示'), '入力'('0円')).
'出力関数'('出力'('なし') , '状態'('0円表示'), '入力'('50円')).
'出力関数'('出力'('なし') , '状態'('0円表示'), '入力'('100円')).
'出力関数'('出力'('なし') , '状態'('50円表示'), '入力'('0円')).
'出力関数'('出力'('なし') , '状態'('50円表示'), '入力'('50円')).
'出力関数'('出力'('ジュース') , '状態'('50円表示'), '入力'('100円')).
'出力関数'('出力'('なし') , '状態'('100円表示'), '入力'('0円')).
'出力関数'('出力'('ジュース') , '状態'('100円表示'), '入力'('50円')).
'出力関数'('出力'('ジュースと50円') , '状態'('100円表示'), '入力'('100円')).
go:-
'初期化',
'販売'(_X1,_Y,_W,_Z).
'初期化':-
title,
abolish('状態',1),
X = '0円表示',
assert('状態'(X)).
'販売'(X,Y,W,Z) :-
'状態'(X),
show(X),
stop_or_continue(1),
'入力'(Y),
'状態遷移関数'('状態'(W),'状態'(X),'入力'(Y)),
'更新'(X,W),
% trace,
'出力関数'('出力'(Z),'状態'(X),'入力'(Y)),
'出力'(Z),
'販売'(W,_Y1,_W1,_Z1).
'入力'(Y):-
'入力集合'(IN),
subtract(IN,['0円'],A),
nl,write('使えるお金は'),nl,
wnl(A),
write('です'),
nl,
write('お金を投入(数字とピリオドとEnter)'),
nl,
tab(5),write('>>>>'),
read(Y1),
concat(Y1,'円',Y2),
anomal(Y,Y2,IN),
nl.
'出力'('なし').
'出力'(X):-
member(X,['ジュース','ジュースと50円']),
Y =['どうぞ ',X,' をお受け取りください。'],
wnl(Y),nl,
write('...ooo [DRINK]'),
nl.
'更新'(X,W):-
retract('状態'(X)),
assert('状態'(W)).
wl([]).
wl([X|Y]):- write(X),wl(Y).
stop_or_continue(Y):-
write(' (続けますか(y/n))'),
read(Y1),
(member(Y1,[n,'N',no,'No',end,quit])->Y=0;Y=1),
nl.
anomal(Y,Y2,IN):-
(
member(Y2,IN)
-> Y = Y2
;
( Y = '0円',
write('この金額は受け付けません'),
write('...ooo'),
nl
)
).
show(Y):-
'状態'(Y),
title(0,V),
write(V),
concat(X,'表示',Y),
nl,tab(3),write('現在の投入金額='),write(X),
nl,
title(0,V),
write(V),
nl.
title :-
title(0,V),
title(1,X),
title(2,Y),
wnl([V,X,Y,V]),
wnl(['ジュースの自動販売機のシミュレーション']),
nl.
wnl([]):- nl.
wnl([X|Y]):- write(X),nl,wnl(Y).
%:-go.
return to front page.