|
|
— |
pl:prolog:pllib:monkey_banana [2019/06/27 15:50] (aktualna) |
| ====== Monkey banana ====== |
| {{tag>problem_solving fun}} |
| ===== Description ===== |
| A program for the monkey and banana problem. |
| |
| **Source**: PROLOG programming for artificial intelligence, 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7. |
| ===== Download ===== |
| Program source code: {{monkey_banana.pl}} |
| ===== Listing ===== |
| <code prolog> |
| % Figure 2.14 A program for the monkey and banana problem. |
| |
| % move( State1, Move, State2): making Move in State1 results in State2; |
| % a state is represented by a term: |
| % state( MonkeyHorizontal, MonkeyVertical, BoxPosition, HasBanana) |
| |
| move( state( middle, onbox, middle, hasnot), % Before move |
| grasp, % Grasp banana |
| state( middle, onbox, middle, has) ). % After move |
| |
| move( state( P, onfloor, P, H), |
| climb, % Climb box |
| state( P, onbox, P, H) ). |
| |
| move( state( P1, onfloor, P1, H), |
| push( P1, P2), % Push box from P1 to P2 |
| state( P2, onfloor, P2, H) ). |
| |
| move( state( P1, onfloor, B, H), |
| walk( P1, P2), % Walk from P1 to P2 |
| state( P2, onfloor, B, H) ). |
| |
| % canget( State): monkey can get banana in State |
| |
| canget( state( _, _, _, has) ). % can 1: Monkey already has it |
| |
| canget( State1) :- % can 2: Do some work to get it |
| move( State1, Move, State2), % Do something |
| canget( State2). % Get it now |
| |
| |
| </code> |
| ===== Comments ===== |
| |