Implement a tribonacci sequence

This commit is contained in:
Manuel Thalmann 2024-06-16 18:00:56 +02:00
parent bfe5475ca6
commit 93cca003c9

View file

@ -92,3 +92,48 @@ sieveC pred xs = realSieve id xs
-- >>> (\ n -> sieve (\ x -> \ y -> (y `mod` x) > 0) [2..n]) 100
-- [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
--
--------------------
-- Exercise 4
--------------------
data Tree a = Tree a [Tree a]
depth :: Tree a -> Integer
-- depth (Tree _ subtrees) =
-- 1 + (maximum $ 0 : (map depth subtrees))
depth tree = realDepth [tree] 0
where
realDepth [] x = x
realDepth trees x = realDepth (concatMap (\ (Tree _ subtrees) -> subtrees) trees) (x + 1)
-- >>> depth (Tree 1 [Tree 1 []])
-- 2
--
-- Notes
-- realDepth [(Tree 1 [Tree 1 []])] 0
-- realDepth (concatMap (\ (Tree _ subtrees) -> subtrees) [Tree 1 [Tree 1 []]]) (0 + 1)
-- realDepth [Tree 1 []] 1
-- realDepth (concatMap (\ (Tree _ subtrees) -> subtrees) [Tree 1 []]) ((0 + 1) + 1)
-- realDepth [] 2
-- 2
fibonacci :: Integer -> Integer
fibonacci = fib 0 1
where
fib acc b 0 = acc
fib acc b x = fib b (acc + b) (x - 1)
-- >>> fibonacci 6
-- 8
--
tribonacci :: Integer -> Integer
tribonacci = trib 0 0 1
where
trib acc b c 0 = acc
trib acc b c x = trib b c (acc + b + c) (x - 1)
-- >>> tribonacci 7
-- 13
--