Aslan 131 Опубликовано 4 апреля, 2016 (изменено) Есть ли тут умельцы по хаскелю?)Прошу помочь решить эту задачку, не справляюсь... Желательно с объяснением для чайника, потому что я уже несколько недель не могу решить Прошу решить наипростейшими способами, если есть возможность то и несколькими вариантами. Буду очень благодарен!1) Дано рекурсивное дерево:data Tree a = Leaf a | LeafEmpty | Node3 a (Tree a) (Tree a) (Tree a) | Node1 (Tree a)1) Определите функцию mapTree :: (a -> b ) -> Tree a -> Tree b2) Учитывая, что данное дерево может быть бесконечным, напишите функцию shorttest, которая посчитает длину самой короткой ветки.Вот всё) Изменено 4 апреля, 2016 пользователем Aslan Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SHAFTWEB 10 Опубликовано 9 апреля, 2016 import Data.Function (fix) data Tree a = Leaf a | LeafEmpty | Node3 a (Tree a) (Tree a) (Tree a) | Node1 (Tree a) shorttest:: Tree a -> Intshorttest t = go 1 [t] where go l xs = let ys = map reduce xs in if any null ys then l else go (l+1) $ concat ys reduce (Node3 _ t1 t2 t3) = [t1, t2, t3] reduce (Node1 t) = [t] reduce _ = [] tst :: Tree Inttst = Node3 11 (Node1 (Node1 LeafEmpty)) (fix Node1) -- бесконечная ветка (Node1 LeafEmpty) main :: IO ()main = print $ shorttest tst 3 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты