このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1245017721/12
#  実際の問題を簡単にした問題例です。 
#   
#  流れ: 
#  キャラクタがバイトをして財布がいっぱいになったら銀行へ行く 
#  ということを目標金額まで繰り返し、到達したらその金がなくなるまで 
#  家でごろ寝し、なくなったらまた働く 
#   
#  キャラクタは 
#    ・バイトをする : 手持ちが1増える 
#    ・銀行で貯金をする : 手持ちを0にし、貯金が1増える 
#    ・家で寝る : 貯金が1減る 
#  の状態を取ります。 
#  財布の許容量は3、目標貯金額は5とします。 
#   
/*
流れ :-
    キャラクタがバイトをして財布がいっぱいになったら銀行へ行く(_財布1,_財布2,_貯金1,_貯金2),
    ということを目標金額まで繰り返し,
    到達したらその金がなくなるまで,
    家でごろ寝し,
    なくなったらまた働く.
*/

キャラクタがバイトをして財布がいっぱいになったら銀行へいく(_財布1,_財布2,_貯金1,_貯金2) :-
    キャラクタがバイトをして(_貯金1,_貯金2),
    財布がいっぱいになったら(_財布1),
    銀行へいく(_財布1,_財布2,_貯金1,_貯金2).    

キャラクタがバイトをして(_貯金1,_貯金2) :-
    _貯金2 is _貯金 + 1,!.

財布がいっぱいになったら(_財布) :-
    いっぱいになったら(_財布).

いっぱいになったら(_財布) :-
    財布の許容量(_許容量),
    _財布 >= _許容量,!.

銀行へいく(_財布1,_財布2,_貯金1,_貯金2) :-
    銀行で貯金をする(_財布1,_財布2,_貯金1,_貯金2),!.

銀行で貯金をする(_財布1,_財布2,_貯金1,_貯金2) :-
    手持ちを0にし、貯金が1増える(_財布1,_財布2,_貯金1,_貯金2).

手持ちを0にし、貯金が1増える(_財布1,_財布2,_貯金1,_貯金2) :-
    手持ちを0にし(_財布1,_財布2),
    貯金が1増える(_貯金1,_貯金2).

手持ちを0にし(_財布1,_財布2) :- _財布2 = 0.

貯金が1増える(_貯金1,_貯金2) :- _貯金2 is _貯金1 + 1.

目標金額まで繰り返し、到達したらその金がなくなるまで(_目標金額,_財布,_財布,_貯金1,_貯金) :-
    _貯金1 >= _目標金額,
    到達したらその金がなくなるまで家でごろ寝し(_貯金1,_貯金),!.
目標金額まで繰り返し、到達したらその金がなくなるまで(_目標金額,_財布1,_財布,_貯金1,_貯金) :-
    キャラクタがバイトをして財布がいっぱいになったら銀行へいく(_財布1,_財布2,_貯金1,_貯金2),
    目標金額まで繰り返し、到達したらその金がなくなるまで(_目標金額,_財布2,_財布,_貯金2,_貯金).

到達したらその金がなくなるまで家でごろ寝し(_貯金1,0) :- _貯金1 =< 0,!.
到達したらその金がなくなるまで家でごろ寝し(_貯金1,_貯金) :-
    家で寝る(_貯金1,_貯金2),
    到達したらその金がなくなるまで家でごろ寝し(_貯金2,_貯金).

貯金が1減る(_貯金1,_貯金2) :- _貯金2 is _貯金1 - 1.

手持ちを0にし、貯金が1増える(_財布1,_財布2,_貯金1,_貯金2) :-
    _財布2 = 0,
    _貯金2 is _貯金1 + 1.

財布の許容量は3(_財布の許容量) :-
    財布の許容量(_財布の許容量).

財布の許容量(3).

目標貯金額は5(_目標貯金額) :-
    目標貯金額(_目標貯金額).

目標貯金額(5).