Negative base numbers: Difference between revisions

Add Factor
m (→‎{{header|Sidef}}: Fix link: Perl 6 --> Raku)
(Add Factor)
Line 491:
10
15
</pre>
 
=={{header|Factor}}==
{{works with|Factor|0.99 2020-03-02}}
<lang factor>USING: formatting fry kernel make math math.combinators
math.extras math.functions math.parser sequences ;
 
: /mod* ( x y -- z w )
[ /mod ] keep '[ [ 1 + ] [ _ abs + ] bi* ] when-negative ;
 
: >nega ( n radix -- str )
[ '[ _ /mod* # ] until-zero ] "" make reverse ;
 
: nega> ( str radix -- n )
swap <reversed> [ ^ swap digit> * ] with map-index sum ;
 
: .round-trip ( n radix -- )
dupd [ >nega ] keep 2dup 2dup nega>
"%d_10 is %s_%d\n%s_%d is %d_10\n\n" printf ;
 
10 -2 146 -3 15 -10 [ .round-trip ] 2tri@</lang>
{{out}}
<pre>
10_10 is 11110_-2
11110_-2 is 10_10
 
146_10 is 21102_-3
21102_-3 is 146_10
 
15_10 is 195_-10
195_-10 is 15_10
</pre>
 
1,808

edits