|
|
pl:prolog:pllib:water_jugs [2019/06/27 15:50] |
pl:prolog:pllib:water_jugs [2019/06/27 15:50] (aktualna) |
| ====== Water jugs ====== |
| {{tag>problem_solving}} |
| ===== Description ===== |
| Solving the water jugs problem. |
| |
| **Source**: The Art of Prolog |
| ===== Download ===== |
| Program source code: {{water_jugs.pl}} |
| ===== Listing ===== |
| <code prolog> |
| /* Problem Solving :- Water Jugs Problem */ |
| |
| initial_state(jugs,jugs(0,0)). |
| |
| final_state(jugs(4,V2)). |
| final_state(jugs(V1,4)). |
| |
| move(jugs(V1,V2),fill(1)). |
| move(jugs(V1,V2),fill(2)). |
| move(jugs(V1,V2),empty(1)). |
| move(jugs(V1,V2),empty(2)). |
| move(jugs(V1,V2),transfer(2,1)). |
| move(jugs(V1,V2),transfer(1,2)). |
| |
| update(jugs(V1,V2),fill(1),jugs(C1,V2)) :- capacity(1,C1). |
| update(jugs(V1,V2),fill(2),jugs(V1,C2)) :- capacity(2,C2). |
| update(jugs(V1,V2),empty(1),jugs(0,V2)). |
| update(jugs(V1,V2),empty(2),jugs(V1,0)). |
| update(jugs(V1,V2),transfer(2,1),jugs(W1,W2)) :- |
| capacity(1,C1), |
| Liquid is V1 + V2, |
| Excess is Liquid - C1, |
| adjust(Liquid,Excess,W1,W2). |
| update(jugs(V1,V2),transfer(1,2),jugs(W1,W2)) :- |
| capacity(2,C2), |
| Liquid is V1 + V2, |
| Excess is Liquid - C2, |
| adjust(Liquid,Excess,W2,W1). |
| |
| adjust(Liquid, Excess,Liquid,0) :- Excess =< 0. |
| adjust(Liquid,Excess,V,Excess) :- Excess > 0, V is Liquid - Excess. |
| |
| legal(jugs(V1,V2)). |
| |
| capacity(1,8). |
| capacity(2,5). |
| |
| % Program 20.3 Solving the water jugs problem |
| |
| </code> |
| ===== Comments ===== |
| |