import "prelude/fn.kmp" import "lib/maybe.kmp" ; like haskell; % is rem and mod is... mod ; ; from here: https://hackage.haskell.org/package/ghc-prim-0.7.0/docs/src/GHC-Classes.html#modInt%23 modInt : Int Int -- Int =: [ dup2 dup2 0 < dip(0 >) & dip(0 > dip(0 <) &) || dip(dup dip(%)) ; FIXME: hits the second branch when 2, -3 if( dip(dip(dup) 0 !=) swap if(+, nip) , drop ) ] divInt : Int Int -- Int =: [ dup2 0 < dip(0 >) & if( dip(1 -) / 1 - , dup2 0 < dip(0 >) & if( dip(1 +) / 1 - ; FIXME: hits second branch when 2, -3 , / ) ) ] succInt : Int -- Int =: [ 1 + ] predInt : Int -- Int =: [ 1 - ] isZeroInt : Int -- Bool =: [ 0 = ] absInt : Int -- Int =: [ dup 0 < if (~ ,) ] ; More from Mirth maxInt : Int Int -- Int =: [ dup2 < if(nip, drop) ] minInt : Int Int -- Int =: [ dup2 < if(drop, nip) ] ; checks for division by zero safeQuot : Int Int -- (Maybe Int) =: [ dup isZeroInt if( drop2 Nothing , / Just ) ] safeRem : Int Int -- (Maybe Int) =: [ dup isZeroInt if( drop2 Nothing , % Just ) ]