Friday, July 6, 2007

monkey banana problem

domains
slist=string*
predicates
member(string,slist)
check(string)
monkey(string,string,string)
check1(char)
check2(char)
clauses
monkey(C,B,S):-L=["chair","stick","banana"],member(C,L),member(B,L),member(S,L),check(C),check(B),check(S),nl,write("Climb the chair"),nl,write("Take the bananas"),nl.
check(X):-X="chair",nl,write("Is chair under bananas?(Y/N) "),readchar(CH),check1(CH).
check(X):-X="stick",nl,write("Is stick in hand? (Y/N) "),readchar(CH1),check2(CH1).
check(X):-X="banana".
check1(G):-G='N',write("Place chair under bananas"),nl.
check1(G):-G='Y'.
check2(H):-H='N',write("Take stick in hand").
check2(H):-H='Y'.
member(P,[P_]).
member(P,[_T]):-member(P,T).

3 comments:

Unknown said...

error hai bhai program me

Unknown said...

% Monkey and banana problem

% Description of legal moves

move( state(middle, onbox, middle, hasnot),
grasp, % Grasp banana
state(middle, onbox, middle, has) ).

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,Moves): monkey in State can get banana by performing Moves

canget( state(_,_,_,has), [] ).
canget(State1,[M|List]) :- move(State1,M,State2), canget(State2,List).

solve(Moves) :- canget(state(atdoor,onfloor,atwindow,hasnot),Moves).
-------------------------------------------------------------------------



Notice how states are identified by the word 'state' in the program source.
Here is a sample run:


-------------------------------------------------------------------------
orion:~/lang/statespace/monkey-and-banana dseaman$ swipl
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.10)
Copyright (c) 1990-2006 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- [mb].
% mb compiled 0.00 sec, 2,280 bytes

Yes
?- solve(Moves).

Moves = [walk(atdoor, atwindow), push(atwindow, middle), climb, grasp]

Yes
?-
-------------------------------------------------------------------------

Ketki Muzumdar said...

what should be declared before given moves that is domains and predicates