% % Schema Declarations % database( { usage( MajorPart:string, MinorPart:string, Quantity:integer ) } ). % % Exported Query Forms for Semantic Compilation % export part_total(Part, TotalQuantity). export part_total($Part, TotalQuantity). export subpart( Part, SubPart ). export subpart( $Part, SubPart ). % % Rules defining part and its total quantity relationship % part_total( SubPart, Quantity ) <- master_part( MasterPart ), component_part( MasterPart, SubPart, Quantity ). master_part( Part ) <- usage( Part, _, _ ), ~usage( _, Part, _ ). component_part( Part, Part, 1 ). component_part( Part, SubPart, Quantity ) <- component_part( Part, FurtherSubPart, Quantity1 ), usage( FurtherSubPart, SubPart, Quantity2 ), Quantity = Quantity1 * Quantity2. % % Rules defining subpart relationships % subpart( Part, SubPart ) <- usage( Part, SubPart, _ ). subpart( Part, SubPart ) <- usage( Part, NextSubPart, _ ), subpart( NextSubPart, SubPart ). cycle( Part, SubPart ) <- subpart(Part, SubPart), usage(SubPart, Part, _).