factor/unmaintained/isequences/ops/modulus/modulus.factor

27 lines
631 B
Factor

! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
IN: isequences.ops.modulus
USING: generic kernel math sequences isequences.interface isequences.base ;
: %%g++ ( s1 s2 -- ms1 ms2 )
2dup [ i-length ] 2apply 2dup [ 0 = ] 2apply or
[ 3drop drop 0 0 ]
[ 2dup mod -rot swap mod swap rot swap ihead >r ihead r> ] if ;
: %%g-+ ( s1 s2 -- ms1 ms2 )
;
: %%g+- ( s1 s2 -- ms2 ms2 )
;
: %%g-- ( s1 s2 -- ms1 ms2 )
;
: %%g ( s1 s2 -- ms1 ms2 )
2dup [ neg? ] 2apply [ [ %%g-- ] [ %%g+- ] if ]
[ [ %%g-+ ] [ %%g++ ] if ] if ; inline
M: object %% %%g ;