factTD :: Int -> Int d :: Int -> Int -> Int factTD(x) -> d(x, 1) d(x, a) -> a | x<=0 d(x, a) -> d(x-1, a*x) | x>0 factRU :: Int -> Int U :: Int -> Int -> Int factRU(x) -> U(1, x) U(i, x) -> x | i>x-1 U(i, x) -> i*U(i+1, x) | i<=x-1 taildown :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int taildown(F, x, i, a) -> a | i < x taildown(F, x, i, a) -> taildown(F, x, i - 1, F(a,i)) | i ≥ x recup :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int recup(F, i, y, a) -> a | i > y recup(F, i, y, a) -> F(recup(F, i + 1, y, a), i) | i ≤ y helper :: Int -> Int -> Int helper(x, y) -> y*x