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.