-- Division eines ArbInt durch eine Ziffer, liefert ein Tupel aus ganzzahligem Teiler und Rest quotrem1 :: ArbInt -> Digit -> (ArbInt, Digit) quotrem1 x d = finish1 (scanl (step1 d) (0, 0) (digits x)) -- Ein Divisionsschritt: Rest des vorigen Schrittes mit der Basis multiplizieren und Tupel mit ganzzahligem Teiler und Rest liefern step1 :: Digit -> (Digit, Digit) -> Digit -> (Digit, Digit) step1 d (q,r) x = (div y d, mod y d) where y = base * r + x -- Die ersten Elemente aller Tupel zu einer Ziffernliste zusammenfassen und normalisieren, das letzte zweite Element ist der Rest finish1 :: [(Digit, Digit)] -> (ArbInt, Digit) finish1 qrs = (norm (map fst qrs), snd (last qrs))