
<append #X () #X >;
<append (#A : #Z) (#A : #X)  #Y>
	<append #Z #X #Y >;

<action #who (#who が、棒を使ってバナナを落として、バナナをつかむ)
	(状態 バナナの下 箱の上 バナナの下 棒 ) 
	(状態 バナナの下 箱の上 バナナの下 バナナ)>;
<action #who (#who が、部屋の角 で棒を拾う)
	(状態 部屋の角 地面 #place2 手ぶら)
	(状態 部屋の角 地面 #place2 棒)>;
<action #who (#who が、#place で箱に登る)
	(状態 #place 地面   #place #Hand) 
	(状態 #place 箱の上 #place #Hand)>;
<action #who (#who が、箱を #place1 から #place2 まで押す)
	(状態 #place1 地面 #place1 #Hand) 
	(状態 #place2 地面 #place2 #Hand)>;
<action #who (#who が、#place1 から #place2 まで歩く)
	(状態 #place1 地面 #place3 #Hand) 
	(状態 #place2 地面 #place3 #Hand)>;
<action #who (#who が、棒を投げる)
	(状態 #place1 地面 #place2 棒)
	(状態 #place1 地面 #place2 手ぶら)>;
<action #who (#who が、箱を持ち上げる)
	(状態 #place1 地面 #place1 #Hand)
	(状態 #place1 地面 #place1 #Hand)>;

::<猿
	<考える #st>
		<考える #st () #rep>
		<printlistnl #rep>
		;

	<考える (状態 _ _ _ バナナ) #rep #rep>;
	<考える #State1 #rep1 #rep>
		<self #who>
		<action #who #Operate #State1 #State2> 
		<append #rep2 #rep1 (#Operate)>
		<考える #State2 #rep2 #rep>
		;
>;



? ::猿 <考える (状態 "スタート地点"  地面 "隣の部屋" 手ぶら)>;


::<ゴリラ
	inherit 猿;
>;


? ::ゴリラ <考える (状態 戦場 地面 敵地 手ぶら)>;

::<"チンパンジー"
	inherit ゴリラ;
>;

? ::"チンパンジー" <考える (状態 木星 地面 月 手ぶら)>;

