/* Filename: hotplate.pro * * Programmer: Br. David Carlson * * Date: March 5, 1991 * * Revised: December 11, 1991 to run under yap. * * Description: This program solves the first homework problem * concerning a hotplate and its parts. */ is_part_of(cord, hotplate). is_part_of(body, hotplate). is_part_of(heating_element, body). is_part_of(cover, body). is_part_of(knob, cover). is_part_of(wire, cord). is_part_of(insulator, cord). is_made_of(heating_element, metal). is_made_of(knob, plastic). is_made_of(wire, metal). is_made_of(insulator, fiber). find_metals(Object) :- is_made_of(Object, metal). find_body_parts(Part) :- is_part_of(Part, body). is_contained_in(Item, Object) :- is_part_of(Item, Object). is_contained_in(Item, Object) :- is_part_of(Item, X), is_contained_in(X, Object). contains_material(Object, Material) :- is_made_of(Object, Material). contains_material(Object, Material) :- is_contained_in(Item, Object), is_made_of(Item, Material). contains_plastic(Object) :- contains_material(Object, plastic). contains_metal_and_fiber(Object) :- contains_material(Object, metal), contains_material(Object, fiber). /* The following predicate can be used to generate possible objects. */ object(X) :- is_part_of(X, _). object(X) :- is_part_of(_, X). /* The following rule uses generate & test when a goal is submitted * with a variable for the parameter. It can also be called with a * specific value as the parameter. */ contains_no_fiber(Object) :- object(Object), /* generate */ not(contains_material(Object, fiber)). /* and test */