You selected amonkey.pl

/* monkey-banana: Newell-Simon's GPS with simple NLP */

% 参照:I. Batko,「AIプログラミング」(安部・田中訳),近代科学社, 2.5節.
% file: monkey.pl 
% created: 1998.10.13.Tue  by K.INDO
% modified: 29 Oct 2002. the program augmented with a simple NLP (natural language processing) in Japanese.

% 猿の4動作--grasp(掴む), climb(箱の上に登る), push(箱を押す), walk(歩く)
move(state( middle, onbox, middle, has_nothing), 
	grasp,	state(middle, onbox, middle, has_a_banana)).
move(S1,climb,S2):-
	S1=state(P, onfloor, P, H), S1,
	S2=state(P, onbox, P, H), S2.
move(S1, push( P1,P2), S2):-
	S1=state( P1, onfloor, P1, H), S1,
	S2=state( P2, onfloor, P2, H), P2\=P1, S2.
move(S1, walk( P1,P2), S2):-
	S1=state( P1, onfloor, B, H), S1,
	S2=state( P2, onfloor, B, H), P2\=P1, S2.
% 猿の計画立案
canget(Goal):- Goal=state( _,_,_, has_a_banana),Goal.
canget(S):- canget(S1),move(S,_Move, S1).
% 状態
initial_state(state(atdoor, onfloor, atwindow, has_nothing)).
state(A, B, C, D):-
	member(A,[atdoor,middle,atwindow]),
	member(B,[onfloor,onbox]),
	member(C,[atdoor,middle,atwindow]),
	member(D,[has_nothing,has_a_banana]).


% 猿の計画立案2
planget(Goal,[[Goal,satisfied]]):- Goal=state( _,_,_, has_a_banana),Goal.
planget(S,[[S,M]|P]):- planget(S1,P),move(S,M, S1),S,\+member([S1,M],P).

% 計画書き出し
wp(Plan):-
	forall(nth1(K,Plan,P),
	  (
		write('時刻'(K)),nl,wa(P),nl
	  )
	).

wa([state(X,Y,Z,W),Move]):-
	'辞書'(monkey,A,'名詞','動作主体'),
	'辞書'(X,P,'名詞','位置'('水平方向')),
	'辞書'(Y,Q,'名詞','位置'('垂直方向')),
	'辞書'(W,State,'動詞','状態'),
	tab(3),write(A-'は'-P-Q-'において'-State),nl,
	'辞書'(box,B,'名詞','道具'),
	'辞書'(Z,R,'名詞','位置'('水平方向')),
	tab(3),write(B-'は'-R-'にある。'),nl,
	'辞書'(Move,Action,'動詞'),
	tab(3),write(A-'が'-Action),nl.

/* NLP part */
% 動詞辞書
'辞書'(satisfied,'バナナを食べている。','動詞').
'辞書'(grasp,'バナナを掴む。','動詞').
'辞書'(climb,'箱の上に登る。','動詞').
'辞書'(push(X,Y),X1-'から'-Y1-'まで箱を押す。','動詞'):-
	'辞書'(X,X1,'名詞','位置'('水平方向')),
	'辞書'(Y,Y1,'名詞','位置'('水平方向')).
'辞書'(walk(X,Y),X1-'から'-Y1-'まで歩く。','動詞'):-
	'辞書'(X,X1,'名詞','位置'('水平方向')),
	'辞書'(Y,Y1,'名詞','位置'('水平方向')).
% 名詞辞書
'辞書'(monkey,'猿','名詞','動作主体').
'辞書'(box,'箱','名詞','道具').
'辞書'(banana,'バナナ','名詞','目標').
% 名詞辞書(位置)
'辞書'(atwindow,'窓際','名詞','位置'('水平方向')).
'辞書'(atdoor,'ドアの近く','名詞','位置'('水平方向')).
'辞書'(middle,'部屋の中央','名詞','位置'('水平方向')).
'辞書'(onfloor,'床の上','名詞','位置'('垂直方向')).
'辞書'(onbox,'箱の上','名詞','位置'('垂直方向')).
% 動詞辞書(状態)
'辞書'(has_nothing,'何も持っていない。','動詞','状態').
'辞書'(has_a_banana,'バナナを持っている。','動詞','状態').




return to front page.