count-digits ( digits n -- digits' ) (original) (raw)

count-digits ( digits n -- digits' )

Vocabulary
math.parser.private

Inputs

digits an object
n an object

Outputs

digits' an object

Definition

USING: combinators kernel math math.private ;

IN: math.parser.private

: count-digits ( digits n -- digits' )
{
{ [ dup 10 < ] [ drop ] }
{ [ dup 100 < ] [ drop 1 fixnum+fast ] }
{ [ dup 1000 < ] [ drop 2 fixnum+fast ] }
[
dup 1000000000000 < [
dup 100000000 < [
dup 1000000 <
[ dup 10000 < ~quotation~ ~quotation~ if ]
[ 10000000 >= 7 6 ? ] if
] [
dup 10000000000 <
[ 1000000000 >= 9 8 ? ]
[ 100000000000 >= 11 10 ? ] if
] if fixnum+fast
] [
[ 12 fixnum+fast ] [ 1000000000000 /i ] bi*
count-digits
] if
]
} cond ; inline recursive