In today’s Programming Praxis exercise, our goal is to convert a given fraction to a sum of fractions with numerator 1. Let’s get started, shall we?
The implementation is fairly similar to the provided one. The main difference is that the ceiling of the fraction is performed via a div, eliminating potential problems with floating point inaccuracies.
egypt :: Integer -> Integer -> [Integer] egypt 1 d = [d] egypt n d = e : egypt (numerator r) (denominator r) where (e,r) = (div (d+n-1) n, n%d - 1%e)
Some tests to see if everything is working properly:
main :: IO () main = do print $ egypt 5 6 == [2,3] print $ egypt 7 15 == [3,8,120] print $ egypt 5 121 == [25,757,763309,873960180913 ,1527612795642093418846225]