Перейти к содержанию
Авторизация  
Aslan

Haskell задачки

Рекомендуемые сообщения

Есть ли тут умельцы по хаскелю?)

Прошу помочь решить эту задачку, не справляюсь... Желательно с объяснением для чайника, потому что я уже несколько недель не могу решить :p 
Прошу решить наипростейшими способами, если есть возможность то и несколькими вариантами. Буду очень благодарен!


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 b
2) Учитывая, что данное дерево может быть бесконечным, напишите функцию shorttest, которая посчитает длину самой короткой ветки.

Вот всё)

Изменено пользователем Aslan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

import Data.Function (fix)
 
data Tree a = Leaf a
            | LeafEmpty
            | Node3 a (Tree a) (Tree a) (Tree a)
            | Node1 (Tree a)
           
shorttest:: Tree a -> Int
shorttest 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 Int
tst = Node3 11 (Node1 (Node1 LeafEmpty))
                     (fix Node1) -- бесконечная ветка
                     (Node1 LeafEmpty)
 
main :: IO ()
main =  print $ shorttest tst

  • Upvote 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...