Ethiopian multiplication: Difference between revisions

Content added Content deleted
m (Move ooRexx to correct position in collating sequence)
No edit summary
Line 2,924: Line 2,924:


This is possibly the smallest multiply routine so far discovered for SNUSP.
This is possibly the smallest multiply routine so far discovered for SNUSP.

=={{header|Soar}}==
<lang soar>##########################################
# multiply takes ^left and ^right numbers
# and a ^return-to
sp {multiply*elaborate*initialize
(state <s> ^superstate.operator <o>)
(<o> ^name multiply
^left <x>
^right <y>
^return-to <r>)
-->
(<s> ^name multiply
^left <x>
^right <y>
^return-to <r>)}

sp {multiply*propose*recurse
(state <s> ^name multiply
^left <x> > 0
^right <y>
^return-to <r>
-^multiply-done)
-->
(<s> ^operator <o> +)
(<o> ^name multiply
^left (div <x> 2)
^right (* <y> 2)
^return-to <s>)}

sp {multiply*elaborate*mod
(state <s> ^name multiply
^left <x>)
-->
(<s> ^left-mod-2 (mod <x> 2))}

sp {multiply*elaborate*recursion-done-even
(state <s> ^name multiply

^left <x>
^right <y>
^multiply-done <temp>
^left-mod-2 0)
-->
(<s> ^answer <temp>)}

sp {multiply*elaborate*recursion-done-odd
(state <s> ^name multiply
^left <x>
^right <y>
^multiply-done <temp>
^left-mod-2 1)
-->
(<s> ^answer (+ <temp> <y>))}

sp {multiply*elaborate*zero
(state <s> ^name multiply
^left 0)
-->
(<s> ^answer 0)}

sp {multiply*elaborate*done
(state <s> ^name multiply
^return-to <r>
^answer <a>)
-->
(<r> ^multiply-done <a>)}</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==