|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 39690 (0x9b0a)
Types: TextFile
Names: »BANANAS2_ADA«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with expertSystem ; use expertSystem;
with monkeyObject ; use monkeyObject;
with monkey, physicalObject, goal;
procedure bananas2 is
package monkeyAndBananas is
procedure find_the_bananas;
end monkeyAndBananas;
package body monkeyAndBananas is
function as_name(str : string) return physical_object is
the_name : physical_object;
ln : integer := 1;
begin
if str'LENGTH > maxLengthName then
ln := maxLengthName;
else
ln := str'LENGTH;
end if;
the_name(1..ln) := str(1..ln);
ln := ln + 1;
while ln <= maxLengthName loop
the_name(ln) := ' ';
ln := ln + 1;
end loop;
return the_name;
end as_name;
function active_goal(a_goal : reference) return boolean is
begin
return
goal.status(a_goal) = active;
end;
function find_active is new collection.findOne(active_goal);
function active_is_on(a_goal : reference) return boolean is
begin
return
goal.status(a_goal) = active and then
goal.goal_type(a_goal) = is_on;
end;
function active_holds(a_goal : reference) return boolean is
begin
return
goal.status(a_goal) = active and then
goal.goal_type(a_goal) = holds;
end;
function active_is_at(a_goal : reference) return boolean is
begin
return
goal.status(a_goal) = active and then
goal.goal_type(a_goal) = is_at;
end;
-----------------------------------------------------------------------------
-- RULES context_on --
-----------------------------------------------------------------------------
function match_1(a_monkey,a_goal : reference) return boolean is
begin
return
active_is_on(a_goal) and then
goal.object_name(a_goal) = floor and then
monkey.is_on(a_monkey) /= floor;
end;
function rule_1 is new tupleCollection.join2(match_1);
function on_floor_C return tupleCollection.object is
begin
return
rule_1(monkey.instances,goal.instances,ANY);
end;
procedure on_floor_A (MG : tuple.object) is
a_monkey, a_goal : reference;
begin
a_monkey := tuple.first(MG);
a_goal := tuple.second(MG);
monkey.modify_is_on(a_monkey, floor);
goal.modify_status(a_goal, satisfied);
put_line("Jump onto the floor");
end;
function match_2(a_monkey,a_goal : reference) return boolean is
begin
return
active_is_on(a_goal) and then
goal.object_name(a_goal) = floor and then
monkey.is_on(a_monkey) = floor;
end;
function rule_2 is new tupleCollection.join2(match_2);
function on_floor_satisfied_C return tupleCollection.object is
begin
return
rule_2(monkey.instances,goal.instances,ANY);
end;
procedure on_floor_satisfied_A (MG : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MG);
goal.modify_status(a_goal, satisfied);
put_line("Monkey is already on floor");
end;
function match_3(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_on(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.is_on(an_object) = floor and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.holds(a_monkey) = nil and then
monkey.is_on(a_monkey) /= goal.object_name(a_goal);
end;
function rule_3 is new tupleCollection.join3(match_3);
function on_physical_object_C return tupleCollection.object is
begin
return
rule_3(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure on_physical_object_A (MGO : tuple.object) is
a_monkey, a_goal : reference;
begin
a_monkey := tuple.first(MGO);
a_goal := tuple.second(MGO);
monkey.modify_is_on(a_monkey, goal.object_name(a_goal));
goal.modify_status(a_goal, satisfied);
put("Climb onto ");
put_line(goal.object_name(a_goal));
end;
function match_4(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_on(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.holds(a_monkey) /= nil;
end;
function rule_4 is new tupleCollection.join3(match_4);
function on_physical_object_holds_C return tupleCollection.object is
begin
return
rule_4(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure on_physical_object_holds_A (MGO : tuple.object) is
begin
goal.make(active, holds, nil, (1,1));
-- put_line("make subgoal on_physical_object_holds");
end;
function match_5(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_on(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.is_on(an_object) = floor and then
monkey.is_at(a_monkey) /= physicalObject.is_at(an_object);
end;
function rule_5 is new tupleCollection.join3(match_5);
function on_physical_object_at_monkey_C return tupleCollection.object is
begin
return
rule_5(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure on_physical_object_at_monkey_A (MGO : tuple.object) is
an_object : reference;
begin
an_object := tuple.third(MGO);
goal.make(active, is_at, nil,
physicalObject.is_at(an_object));
-- put_line("make subgoal on_physical_object_at_monkey");
end;
function match_6(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_on(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.is_on(an_object) = floor and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.is_on(a_monkey) = goal.object_name(a_goal);
end;
function rule_6 is new tupleCollection.join3(match_6);
function on_physical_object_satisfied_C return tupleCollection.object is
begin
return
rule_6(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure on_physical_object_satisfied_A (MGO : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MGO);
goal.modify_status(a_goal, satisfied);
put("Monkey is already on ");
put_line(goal.object_name(a_goal));
end;
-----------------------------------------------------------------------------
-- RULES context_holds --
-----------------------------------------------------------------------------
function match_7(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_holds(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.holds(a_monkey) /= nil and then
physicalObject.name(an_object) = monkey.holds(a_monkey);
end;
function rule_7 is new tupleCollection.join3(match_7);
function holds_nil_C return tupleCollection.object is
begin
return
rule_7(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_nil_A (MGO : tuple.object) is
a_monkey, a_goal, an_object : reference;
begin
a_monkey := tuple.first(MGO);
a_goal := tuple.second(MGO);
an_object := tuple.third(MGO);
put("Drop ");
put_line(monkey.holds(a_monkey));
goal.modify_status(a_goal, satisfied);
monkey.modify_object_held(a_monkey, nil);
physicalObject.modify_is_on(an_object, floor);
end;
function match_8(a_monkey,a_goal : reference) return boolean is
begin
return
active_holds(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.holds(a_monkey) = nil;
end;
function rule_8 is new tupleCollection.join2(match_8);
function holds_nil_satisfied_C return tupleCollection.object is
begin
return
rule_8(monkey.instances,goal.instances,ANY);
end;
procedure holds_nil_satisfied_A (MG : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MG);
goal.modify_status(a_goal, satisfied);
put_line("Monkey is holding nothing");
end;
function match_9(a_monkey,a_goal,an_object1,an_object2 : reference)
return boolean is
function match2(an_object : reference) return boolean is
begin
return
physicalObject.is_on(an_object) = goal.object_name(a_goal);
end;
function on_goal_object is new collection.findOne(match2);
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object1) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object1) =
light and then
physicalObject.is_on(an_object1) =
ceiling and then
physicalObject.name(an_object2) =
ladder and then
physicalObject.is_on(an_object2) =
floor and then
physicalObject.is_at(an_object1) =
physicalObject.is_at(an_object2) and then
monkey.is_on(a_monkey) = ladder and then
monkey.holds(a_monkey) = nil and then
collection.isNull(on_goal_object(physicalObject.instances));
end;
function rule_9 is new tupleCollection.join4(match_9);
function holds_object_ceiling_C return tupleCollection.object is
begin
return
rule_9(monkey.instances,goal.instances,physicalObject.instances,
physicalObject.instances,ANY);
end;
procedure holds_object_ceiling_A (MGO1O2 : tuple.object) is
a_monkey, a_goal, an_object : reference;
begin
a_monkey := tuple.first(MGO1O2);
a_goal := tuple.second(MGO1O2);
an_object := tuple.third(MGO1O2);
goal.modify_status(a_goal, satisfied);
monkey.modify_object_held(a_monkey, goal.object_name(a_goal));
physicalObject.modify_is_on(an_object, nil);
put("Grab ");
put_line(goal.object_name(a_goal));
end;
function match_10(a_monkey,a_goal,an_object1,an_object2 : reference)
return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object1) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object1) =
light and then
physicalObject.is_on(an_object1) =
ceiling and then
physicalObject.name(an_object2) =
ladder and then
physicalObject.is_on(an_object2) =
floor and then
physicalObject.is_at(an_object1) =
physicalObject.is_at(an_object2) and then
monkey.is_on(a_monkey) /= ladder;
end;
function rule_10 is new tupleCollection.join4(match_10);
function holds_object_ceiling_on_C return tupleCollection.object is
begin
return
rule_10(monkey.instances,goal.instances,physicalObject.instances,
physicalObject.instances,ANY);
end;
procedure holds_object_ceiling_on_A (MGO1O2 : tuple.object) is
begin
goal.make(active, is_on, ladder, (1,1));
-- put_line("make subgoal holds_object_ceiling_on");
end;
function match_11(a_goal,an_object1,an_object2 : reference)
return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object1) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object1) =
light and then
physicalObject.is_on(an_object1) =
ceiling and then
physicalObject.name(an_object2) =
ladder and then
physicalObject.is_at(an_object1) /=
physicalObject.is_at(an_object2);
end;
function rule_11 is new tupleCollection.join3(match_11);
function holds_object_ceiling_at_object_C return tupleCollection.object is
begin
return
rule_11(goal.instances,physicalObject.instances,
physicalObject.instances,ANY);
end;
procedure holds_object_ceiling_at_object_A (GO1O2 : tuple.object) is
an_object : reference;
begin
an_object := tuple.second(GO1O2);
goal.make(active, is_at, ladder, physicalObject.is_at(an_object));
-- put_line("make subgoal holds_object_ceiling_at_object");
end;
function match_12(a_monkey,a_goal,an_object : reference) return boolean is
function match2(an_object : reference) return boolean is
begin
return
physicalObject.is_on(an_object) = goal.object_name(a_goal);
end;
function on_goal_object is new collection.findOne(match2);
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) =
light and then
physicalObject.is_on(an_object) /=
ceiling and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.is_on(a_monkey) = floor and then
monkey.holds(a_monkey) = nil and then
collection.isNull(on_goal_object(physicalObject.instances));
end;
function rule_12 is new tupleCollection.join3(match_12);
function holds_object_not_ceiling_C return tupleCollection.object is
begin
return
rule_12(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_object_not_ceiling_A (MGO : tuple.object) is
a_monkey, a_goal, an_object : reference;
begin
a_monkey := tuple.first(MGO);
a_goal := tuple.second(MGO);
an_object := tuple.third(MGO);
goal.modify_status(a_goal, satisfied);
monkey.modify_object_held(a_monkey, goal.object_name(a_goal));
physicalObject.modify_is_on(an_object, nil);
put("Grab ");
put_line(goal.object_name(a_goal));
end;
function match_13(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) =
light and then
physicalObject.is_on(an_object) /=
ceiling and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.is_on(a_monkey) /= floor;
end;
function rule_13 is new tupleCollection.join3(match_13);
function holds_object_not_ceiling_on_C return tupleCollection.object is
begin
return
rule_13(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_object_not_ceiling_on_A (MGO : tuple.object) is
begin
goal.make(active, is_on, floor, (1,1));
-- put_line("make subgoal holds_object_not_ceiling_on");
end;
function match_14(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) =
light and then
physicalObject.is_on(an_object) /=
ceiling and then
monkey.is_at(a_monkey) /= physicalObject.is_at(an_object);
end;
function rule_14 is new tupleCollection.join3(match_14);
function holds_object_not_ceiling_at_monkey_C
return tupleCollection.object is
begin
return
rule_14(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_object_not_ceiling_at_monkey_A (MGO : tuple.object) is
an_object : reference;
begin
an_object := tuple.third(MGO);
goal.make(active, is_at, nil, physicalObject.is_at(an_object));
-- put_line("make subgoal holds_object_not_ceiling_at_monkey");
end;
function match_15(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) =
light and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.holds(a_monkey) /= nil and then
monkey.holds(a_monkey) /= goal.object_name(a_goal);
end;
function rule_15 is new tupleCollection.join3(match_15);
function holds_object_holds_C return tupleCollection.object is
begin
return
rule_15(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_object_holds_A (MGO : tuple.object) is
begin
goal.make(active, holds, nil, (1,1));
-- put_line("make subgoal holds_object_holds");
end;
function match_16(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_holds(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) =
light and then
physicalObject.is_on(an_object) = nil and then
monkey.is_at(a_monkey) =
physicalObject.is_at(an_object) and then
monkey.holds(a_monkey) = goal.object_name(a_goal);
end;
function rule_16 is new tupleCollection.join3(match_16);
function holds_object_satisfied_C return tupleCollection.object is
begin
return
rule_16(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure holds_object_satisfied_A (MGO : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MGO);
goal.modify_status(a_goal, satisfied);
put("Object ");
put(goal.object_name(a_goal));
put_line(" is already being held");
end;
-----------------------------------------------------------------------------
-- RULES context_at --
-----------------------------------------------------------------------------
function match_17(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_at(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
monkey.is_at(a_monkey) /=
goal.go_to(a_goal) and then
monkey.holds(a_monkey) =
goal.object_name(a_goal) and then
monkey.is_on(a_monkey) = floor;
end;
function rule_17 is new tupleCollection.join3(match_17);
function at_object_C return tupleCollection.object is
begin
return
rule_17(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure at_object_A (MGO : tuple.object) is
a_monkey, a_goal, an_object : reference;
begin
a_monkey := tuple.first(MGO);
a_goal := tuple.second(MGO);
an_object := tuple.third(MGO);
goal.modify_status(a_goal, satisfied);
monkey.modify_coordinate(a_monkey, goal.go_to(a_goal));
physicalObject.modify_coordinate(an_object, goal.go_to(a_goal));
put("Move ");
put(goal.object_name(a_goal));
put(" to (");
put(goal.go_to(a_goal).x);
put(" , ");
put(goal.go_to(a_goal).y);
put_line(" )");
end;
function match_18(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_at(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
monkey.is_on(a_monkey) /= floor and then
monkey.holds(a_monkey) =
goal.object_name(a_goal) and then
physicalObject.is_at(an_object) /= goal.go_to(a_goal);
end;
function rule_18 is new tupleCollection.join3(match_18);
function at_object_on_floor_C return tupleCollection.object is
begin
return
rule_18(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure at_object_on_floor_A (MGO : tuple.object) is
begin
goal.make(active, is_on, floor, (1,1));
-- put_line("make subgoal at_object_on_floor");
end;
function match_19(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_at(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) = light and then
physicalObject.is_at(an_object) /=
goal.go_to(a_goal) and then
monkey.holds(a_monkey) /= goal.object_name(a_goal);
end;
function rule_19 is new tupleCollection.join3(match_19);
function at_object_holds_C return tupleCollection.object is
begin
return
rule_19(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure at_object_holds_A (MGO : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MGO);
goal.make(active, holds, goal.object_name(a_goal), (1,1));
-- put_line("make subgoal at_object_holds");
end;
function match_20(a_goal,an_object : reference) return boolean is
begin
return
active_is_at(a_goal) and then
physicalObject.name(an_object) =
goal.object_name(a_goal) and then
physicalObject.weight(an_object) = light and then
physicalObject.is_at(an_object) = goal.go_to(a_goal);
end;
function rule_20 is new tupleCollection.join2(match_20);
function at_object_satisfied_C return tupleCollection.object is
begin
return
rule_20(goal.instances,physicalObject.instances,ANY);
end;
procedure at_object_satisfied_A (GO : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.first(GO);
goal.modify_status(a_goal, satisfied);
put("The object ");
put(goal.object_name(a_goal));
put(" is already at (");
put(goal.go_to(a_goal).x);
put(" , ");
put(goal.go_to(a_goal).y);
put_line(" )");
end;
function match_21(a_monkey,a_goal : reference) return boolean is
begin
return
active_is_at(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.is_at(a_monkey) /=
goal.go_to(a_goal) and then
monkey.is_on(a_monkey) = floor and then
monkey.holds(a_monkey) = nil;
end;
function rule_21 is new tupleCollection.join2(match_21);
function at_monkey_C return tupleCollection.object is
begin
return
rule_21(monkey.instances,goal.instances,ANY);
end;
procedure at_monkey_A (MG : tuple.object) is
a_monkey, a_goal : reference;
begin
a_monkey := tuple.first(MG);
a_goal := tuple.second(MG);
goal.modify_status(a_goal, satisfied);
monkey.modify_coordinate(a_monkey, goal.go_to(a_goal));
put("Walk to (");
put(goal.go_to(a_goal).x);
put(" , ");
put(goal.go_to(a_goal).y);
put_line(" )");
end;
function match_22(a_monkey,a_goal,an_object : reference) return boolean is
begin
return
active_is_at(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.is_on(a_monkey) = floor and then
physicalObject.name(an_object) =
monkey.holds(a_monkey) and then
monkey.is_at(a_monkey) /= goal.go_to(a_goal);
end;
function rule_22 is new tupleCollection.join3(match_22);
function at_monkey_object_C return tupleCollection.object is
begin
return
rule_22(monkey.instances,goal.instances,physicalObject.instances,ANY);
end;
procedure at_monkey_object_A (MGO : tuple.object) is
a_monkey, a_goal, an_object : reference;
begin
a_monkey := tuple.first(MGO);
a_goal := tuple.second(MGO);
an_object := tuple.third(MGO);
goal.modify_status(a_goal, satisfied);
physicalObject.modify_coordinate(an_object, goal.go_to(a_goal));
monkey.modify_coordinate(a_monkey, goal.go_to(a_goal));
put("Walk to (");
put(goal.go_to(a_goal).x);
put(" , ");
put(goal.go_to(a_goal).y);
put(" ) carrying ");
put_line(monkey.holds(a_monkey));
end;
function match_23(a_monkey,a_goal : reference) return boolean is
begin
return
active_is_at(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.is_at(a_monkey) /=
goal.go_to(a_goal) and then
monkey.is_on(a_monkey) /= floor;
end;
function rule_23 is new tupleCollection.join2(match_23);
function at_monkey_on_C return tupleCollection.object is
begin
return
rule_23(monkey.instances,goal.instances,ANY);
end;
procedure at_monkey_on_A (MG : tuple.object) is
begin
goal.make(active, is_on, floor, (1,1));
-- put_line("make subgoal at_monkey_on");
end;
function match_24(a_monkey,a_goal : reference) return boolean is
begin
return
active_is_at(a_goal) and then
goal.object_name(a_goal) = nil and then
monkey.is_at(a_monkey) = goal.go_to(a_goal);
end;
function rule_24 is new tupleCollection.join2(match_24);
function at_monkey_satisfied_C return tupleCollection.object is
begin
return
rule_24(monkey.instances,goal.instances,ANY);
end;
procedure at_monkey_satisfied_A (MG : tuple.object) is
a_goal : reference;
begin
a_goal := tuple.second(MG);
goal.modify_status(a_goal, satisfied);
put("Monkey is already at (");
put(goal.go_to(a_goal).x);
put(" , ");
put(goal.go_to(a_goal).y);
put_line(" )");
end;
function match_25(a_goal : reference) return boolean is
begin
return
goal.status(a_goal) = satisfied and then
collection.isNull(find_active(goal.instances));
end;
function rule_25 is new collection.findOne(match_25);
function congratulations_C return boolean is
begin
return
not collection.isNull(rule_25(goal.instances));
end;
procedure congratulations_A is
begin
put_line("CONGRATULATIONS the goals are satisfied");
end;
function impossible_C return boolean is
begin
return
not collection.isNull(find_active(goal.instances));
end;
procedure impossible_A is
a_goal : reference;
begin
a_goal := find_active(goal.instances);
put("IMPOSSIBLE, the goal ");
put(g_type'IMAGE(goal.goal_type(a_goal)));
put_line(" cannot be achieved");
end;
procedure create_test(i : positive) is
begin
case i is
when 1 =>
physicalObject.make(as_name("bananas"),
(9,9),
light,
ceiling);
physicalObject.make(as_name("couch"),
(7,7),
heavy,
floor);
physicalObject.make(ladder,
(4,3),
light,
floor);
monkey.make((7,7),
as_name("couch"),
as_name("blanket"));
physicalObject.make(as_name("blanket"),
(7,7),
light,
nil);
goal.make(active,
holds,
as_name("bananas"),
(1,1));
when 2 =>
physicalObject.make(as_name("bananas"),
(7,7),
light,
ceiling);
physicalObject.make(ladder,
(5,5),
light,
floor);
physicalObject.make(as_name("blanket"),
(5,5),
light,
floor);
monkey.make((5,5),
ladder,
nil);
goal.make(active,
holds,
as_name("bananas"),
(1,1));
when 3 =>
physicalObject.make(ladder,
(5,7),
light,
floor);
monkey.make((5,7),
ladder,
nil);
goal.make(active,
is_on,
floor,
(1,1));
when 4 =>
physicalObject.make(ladder,
(5,7),
light,
floor);
monkey.make((5,7),
floor,
nil);
goal.make(active,
is_on,
floor,
(1,1));
when 5 =>
physicalObject.make(ladder,
(5,5),
light,
floor);
monkey.make((5,5),
floor,
nil);
goal.make(active,
is_on,
ladder,
(1,1));
when 6 =>
monkey.make((5,5),
floor,
ladder);
physicalObject.make(ladder,
(5,5),
light,
nil);
goal.make(active,
is_on,
ladder,
(1,1));
when 7 =>
physicalObject.make(ladder,
(6,5),
light,
floor);
monkey.make((3,3),
floor,
nil);
goal.make(active,
is_on,
ladder,
(1,1));
when 8 =>
physicalObject.make(ladder,
(6,5),
light,
floor);
monkey.make((6,5),
ladder,
nil);
goal.make(active,
is_on,
ladder,
(1,1));
when 9 =>
monkey.make((5,5),
floor,
as_name("blanket"));
physicalObject.make(as_name("blanket"),
(5,5),
light,
nil);
goal.make(active,
holds,
nil,
(1,1));
when 10 =>
monkey.make((5,5),
floor,
nil);
goal.make(active,
holds,
nil,
(1,1));
when 11 =>
physicalObject.make(ladder,
(5,5),
light,
floor);
physicalObject.make(as_name("bananas"),
(5,5),
light,
ceiling);
monkey.make((5,5),
floor,
nil);
goal.make(active,
holds,
as_name("bananas"),
(1,1));
when 12 =>
physicalObject.make(ladder,
(5,5),
light,
floor);
physicalObject.make(as_name("bananas"),
(7,7),
light,
ceiling);
monkey.make((5,5),
ladder,
as_name("blanket"));
physicalObject.make(as_name("blanket"),
(5,5),
light,
nil);
goal.make(active,
holds,
as_name("bananas"),
(1,1));
when 13 =>
physicalObject.make(ladder,
(5,5),
light,
floor);
monkey.make((5,5),
ladder,
nil);
goal.make(active,
holds,
ladder,
(1,1));
when 14 =>
physicalObject.make(ladder,
(7,5),
light,
floor);
monkey.make((5,5),
floor,
nil);
goal.make(active,
holds,
ladder,
(1,1));
when 15 =>
monkey.make((5,5),
floor,
as_name("bananas"));
physicalObject.make(as_name("bananas"),
(5,5),
light,
nil);
goal.make(active,
holds,
as_name("bananas"),
(1,1));
when 16 =>
monkey.make((5,7),
floor,
nil);
physicalObject.make(ladder,
(7,7),
light,
floor);
goal.make(active,
is_at,
nil,
(7,7));
when 17 =>
monkey.make((5,5),
floor,
as_name("blanket"));
physicalObject.make(as_name("blanket"),
(5,5),
light,
nil);
physicalObject.make(ladder,
(7,7),
light,
floor);
goal.make(active,
is_at,
nil,
(7,7));
when 18 =>
physicalObject.make(as_name("couch"),
(5,5),
light,
floor);
monkey.make((5,5),
as_name("couch"),
nil);
physicalObject.make(ladder,
(7,7),
light,
floor);
goal.make(active,
is_at,
nil,
(7,7));
when 19 =>
monkey.make((5,5),
floor,
ladder);
physicalObject.make(ladder,
(5,5),
light,
nil);
physicalObject.make(as_name("bananas"),
(8,8),
light,
ceiling);
goal.make(active,
is_at,
ladder,
(8,8));
when 20 =>
physicalObject.make(as_name("couch"),
(5,5),
heavy,
floor);
monkey.make((5,5),
as_name("couch"),
as_name("bananas"));
physicalObject.make(as_name("bananas"),
(5,5),
light,
nil);
goal.make(active,
is_at,
as_name("bananas"),
(7,7));
when 21 =>
physicalObject.make(ladder,
(7,5),
light,
floor);
monkey.make((5,5),
floor,
nil);
physicalObject.make(as_name("bananas"),
(8,8),
light,
ceiling);
goal.make(active,
is_at,
ladder,
(8,8));
when 22 =>
monkey.make((5,5),
floor,
nil);
physicalObject.make(as_name("elephant"),
(8,8),
heavy,
floor);
goal.make(active,
is_at,
as_name("elephant"),
(6,7));
when others => null;
end case;
end create_test;
package lookForBananas2 is new engine(
context_name => "Find banan",
resolution => LEX,
used_rules => 24,
name_1 => "on_floor ",
condition_1 => on_floor_C,
action_1 => on_floor_A,
name_2 => "on_floor_satisf",
condition_2 => on_floor_satisfied_C,
action_2 => on_floor_satisfied_A,
name_3 => "on_phy_obj ",
condition_3 => on_physical_object_C,
action_3 => on_physical_object_A,
name_4 => "on_phy_obj_hold",
condition_4 => on_physical_object_holds_C,
action_4 => on_physical_object_holds_A,
name_5 => "on_phy_obj_at_m",
condition_5 => on_physical_object_at_monkey_C,
action_5 => on_physical_object_at_monkey_A,
name_6 => "on_phy_obj_sati",
condition_6 => on_physical_object_satisfied_C,
action_6 => on_physical_object_satisfied_A,
name_7 => "holds_nil ",
condition_7 => holds_nil_C,
action_7 => holds_nil_A,
name_8 => "holds_nil_satis",
condition_8 => holds_nil_satisfied_C,
action_8 => holds_nil_satisfied_A,
name_9 => "hol_obj_ceil ",
condition_9 => holds_object_ceiling_C,
action_9 => holds_object_ceiling_A,
name_10 => "hol_obj_ceil_on",
condition_10 => holds_object_ceiling_on_C,
action_10 => holds_object_ceiling_on_A,
name_11 => "hol_obj_ceil_at",
condition_11 => holds_object_ceiling_at_object_C,
action_11 => holds_object_ceiling_at_object_A,
name_12 => "hol_obj_not_cei",
condition_12 => holds_object_not_ceiling_C,
action_12 => holds_object_not_ceiling_A,
name_13 => "hol_obj_n_ce_on",
condition_13 => holds_object_not_ceiling_on_C,
action_13 => holds_object_not_ceiling_on_A,
name_14 => "hol_obj_n_c_at_",
condition_14 => holds_object_not_ceiling_at_monkey_C,
action_14 => holds_object_not_ceiling_at_monkey_A,
name_15 => "hol_obj_holds ",
condition_15 => holds_object_holds_C,
action_15 => holds_object_holds_A,
name_16 => "hol_obj_satisfi",
condition_16 => holds_object_satisfied_C,
action_16 => holds_object_satisfied_A,
name_17 => "at_object ",
condition_17 => at_object_C,
action_17 => at_object_A,
name_18 => "at_obj_on_floor",
condition_18 => at_object_on_floor_C,
action_18 => at_object_on_floor_A,
name_19 => "at_object_holds",
condition_19 => at_object_holds_C,
action_19 => at_object_holds_A,
name_20 => "at_obj_satisfie",
condition_20 => at_object_satisfied_C,
action_20 => at_object_satisfied_A,
name_21 => "at_monkey ",
condition_21 => at_monkey_C,
action_21 => at_monkey_A,
name_22 => "at_monkey_objec",
condition_22 => at_monkey_object_C,
action_22 => at_monkey_object_A,
name_23 => "at_monkey_on ",
condition_23 => at_monkey_on_C,
action_23 => at_monkey_on_A,
name_24 => "at_monkey_satis",
condition_24 => at_monkey_satisfied_C,
action_24 => at_monkey_satisfied_A);
procedure find_the_bananas is
result : boolean;
begin
put_line("-------------------------------------------------");
for i in 1..22 loop
put("TEST Nr "); put(i); put_line(" :");
create_test(i);
result:=lookForBananas2.inference(ANY);
if congratulations_C then
congratulations_A;
elsif impossible_C then
impossible_A;
end if;
monkey.clear;
physicalObject.clear;
goal.clear;
put_line("-------------------------------------------------");
end loop;
end find_the_bananas;
end monkeyAndBananas;
begin
debugger.resetDebug(debugger.text);
debugger.setDebugOn(debugger.completly);
debugger.refreshDebug;
debugger.setDebugOff(debugger.conditionEvalued);
monkeyAndBananas.find_the_bananas;
end bananas2;