
APT.all-test.Algebra.algebra.solve-problem.add.soar Maven / Gradle / Ivy
## Add
## Includes proposals for add, subtract, multiply, divide between numbers
## Includes special cases for when one is not a value and other is
## 0 (multiply, add, subtract, divide) or 1
## 1 (multiply, divide)
sp {algebra*propose*add*value
(state ^name solve-problem
^current-clause )
( ^operation { << multiply divide add subtract >> }
^right-side.type number
^left-side.type number)
-->
( ^operator + = 90)
( ^name )
}
sp {algebra*propose*subtract-divide*value
(state ^name solve-problem
^current-clause )
( ^operation { << divide subtract >> }
^right-side.type variable
^left-side.type variable)
-->
( ^operator + = 90)
( ^name )
}
sp {algebra*propose*add*value-0*right
(state ^name solve-problem
^current-clause )
( ^operation { << multiply add subtract >> }
^right-side.value << 0. 0 >>
-^left-side.type number)
-->
( ^operator + = 90)
( ^name )
}
sp {algebra*propose*add*value-0*left
(state ^name solve-problem
^current-clause )
( ^operation { << multiply divide add >> }
^left-side.value << 0 0. >>
-^right-side.type number)
-->
( ^operator + = 90)
( ^name )
}
sp {algebra*propose*mulitply*value-1*right
(state ^name solve-problem
^current-clause )
( ^operation { << multiply divide >> }
-^dont-multiply true
^right-side.value << 1. 1 >>
-^left-side.type number)
-->
( ^operator + = 90)
( ^name )
}
sp {algebra*propose*multiply*value-1*left
(state ^name solve-problem
^current-clause )
( ^operation { << multiply >> }
-^dont-multiply true
^left-side.value << 1 1. >>
-^right-side.type number)
-->
( ^operator + = 90)
( ^name )
}
################ ADD
sp {algebra*apply*add*values
(state ^operator.name add
^current-clause )
( ^right-side
^left-side
^operation add)
( ^type number
^value )
( ^type number
^value )
-->
(write (crlf) |Add | |+| )
( ^right-side -
^left-side -
^operation add -
^type number
^value (+ ))
}
sp {algebra*apply*add*values-0-right-left-variable
(state ^operator
^current-clause )
( ^name add
^clause )
( ^right-side
^left-side
^parent-clause
^operation add)
( ^ { << left-side right-side >> } )
( ^type number
^value << 0. 0 >>)
( -^type number)
-->
(write (crlf) |Add | | + | 0 )
( ^ -
^ )
( ^current-clause -
)
}
sp {algebra*apply*add*values-0-left-right-variable
(state ^operator
^current-clause )
( ^name { << add subtract >> }
^clause )
( ^right-side
^left-side
^parent-clause
^operation )
( ^ { << left-side right-side >> } )
( ^type number
^value << 0. 0 >>)
( -^type number)
-->
(write (crlf) | | | | 0 )
( ^ -
^ )
( ^current-clause -
)
}
############Subtract##############
sp {algebra*apply*subtract
(state ^operator.name subtract
^current-clause )
( ^right-side
^left-side
^operation subtract)
( ^type number
^value )
( ^type number
^value )
-->
(write (crlf) |Subtract | | - | )
( ^right-side -
^left-side -
^operation subtract -
^type number
^value (- ))
}
sp {algebra*apply*subtract*variable
(state ^operator.name subtract
^current-clause )
( ^right-side
^left-side
^operation subtract)
( ^type variable
^value )
( ^type variable
^value )
-->
(write (crlf) |Subtract | | - | |= 0| )
( ^right-side -
^left-side -
^operation subtract -
^type number
^value 0)
}
##############Multiply
sp {algebra*apply*multiply
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation multiply)
( ^type number
^value )
( ^type number
^value )
-->
(write (crlf) |Multiply | | * | )
( ^right-side -
^left-side -
^operation multiply -
^type number
^value (* ))
}
########## 0
sp {algebra*apply*multiply*variable*multiply*0*right
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation multiply)
( ^type number
^value << 0 0. >>)
( ^type variable
^value )
-->
(write (crlf) |Multiply | |* 0 = 0 |)
( ^right-side -
^left-side -
^operation multiply -
^type number
^value 0)
}
sp {algebra*apply*multiply*variable*multiply*0*left
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation << divide multiply >>)
( ^type number
^value << 0. 0 >>)
( ^type variable
^value )
-->
(write (crlf) |Multiply | |* 0 = 0 |)
( ^right-side -
^left-side -
^operation multiply -
^type number
^value 0)
}
########### 1
sp {algebra*apply*multiply*variable*multiply*1*right
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation { << divide multiply >> })
( ^type number
^value << 1 1. >>)
( ^type variable
^value )
-->
(write (crlf) |Multiply | | * 1 = | )
( ^right-side -
^left-side -
^operation -
^type variable
^value )
}
sp {algebra*apply*multiply*variable*multiply*1*right*not-variable
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation { << divide multiply >> })
( ^type number
^value << 1 1. >>)
( ^right-side
^left-side
^operation )
-->
(write (crlf) | | |* 1 =| | | | | )
( ^right-side -
^left-side -
^operation -
)
}
sp {algebra*apply*multiply*variable*multiply*1*left
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation multiply)
( ^type number
^value << 1. 1 >>)
( ^type variable
^value )
-->
(write (crlf) |Multiply | | * 1 = | )
( ^right-side -
^left-side -
^operation multiply -
^type variable
^value )
}
sp {algebra*apply*multiply*variable*multiply*1*left*not-variable
(state ^operator.name multiply
^current-clause )
( ^right-side
^left-side
^operation multiply)
( ^type number
^value << 1 1. >>)
( ^right-side
^left-side
^operation { <> multiply })
-->
(write (crlf) |Multiply | |* 1 =| | | | | )
(