RosettaCodeData/Task/Exponentiation-operator/Factor/exponentiation-operator-3.f...

14 lines
298 B
Factor

USING: combinators kernel math ;
IN: test
: (pow) ( f n -- f' )
[ dup even? ] [ [ sq ] [ 2 /i ] bi* ] while
dup 1 = [ drop ] [ dupd 1 - (pow) * ] if ;
: pow ( f n -- f' )
{
{ [ dup 0 < ] [ abs (pow) recip ] }
{ [ dup 0 = ] [ 2drop 1 ] }
[ (pow) ]
} cond ;