#!/usr/bin/env python3 def multiplication(Model): prods = [] # TODO: switch operands so less steps are needed # switch_mul = Model.productionstring( # name="switch_mul", # string=""" # =g> # =imaginal> # ==> # =imaginal> # """, # ) # prods.append(switch_mul) start_mul = Model.productionstring( name="start_mul", string=""" =g> isa math_goal op mul =imaginal> isa math_op op mul arg1 ~0 arg1 ~1 arg2 ~0 arg1 ~1 arg1 =mul arg2 =arg ones2 =ones tens2 =tens hundreds2 =huns ==> !g> show terminal +g> isa math_goal op add task mul +imaginal> isa math_op op add arg1 =arg ones1 =ones tens1 =tens hundreds1 =huns arg2 =arg ones2 =ones tens2 =tens hundreds2 =huns mul_counter =mul +retrieval> isa math_op op add arg1 =arg arg2 =arg """, ) prods.append(start_mul) count_mul = Model.productionstring( name="count_mul", string=""" =g> isa math_goal op add_done task mul =imaginal> isa math_op op add mul_counter =counter ==> =g> isa math_goal op count_done +retrieval> isa math_op op add arg1 1 result =counter """ ) step_mul = Model.productionstring( name="step_mul", string=""" =g> isa math_goal op count_done task mul =imaginal> isa math_op op add hundreds_ans =hun_ans tens_ans =ten_ans ones_ans =one_ans mul_counter =mul_counter =retrieval> isa math_op op add result =mul_counter arg2 =new_counter ==> =g> isa math_goal op mul task mul +imaginal> isa math_op op mul arg1 =new_counter ones1 =new_counter hundreds2 =hun_ans tens2 =ten_ans ones2 =one_ans mul_counter =new_counter """, ) prods.append(step_mul) return prods