Доброго времени суток. Всех с Новым годом.
Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:
1) Функция removeDoubleStars :: [String] -> [String]
Составить список из строк исходного списка, в который входят все строки, кроме строк, имеющих среди символов строки более одного символа '*' ("звездочка")
2) Дерево произвольной структуры имеет следующее описание типа данных
data Tree a = Node a [Tree a]
то есть каждый узел дерева имеет список поддеревьев. Определить функцию обработки деревьев:
height :: Tree a -> Int
Вычисляет высоту дерева.
Огромная просьба не писать, что-то типа — читай с 35 по 306 стр. того-то учебника.
Здравствуйте, AeMK, Вы писали:
AMK>Доброго времени суток. Всех с Новым годом. AMK>Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:
AMK>
AMK>1) Функция removeDoubleStars :: [String] -> [String] AMK>Составить список из строк исходного списка, в который входят все строки, кроме строк, имеющих среди символов строки более одного символа '*' ("звездочка") AMK>
count c = length . elemIndices c
removeDoubleStars = filter (\x -> count '*' x <= 1)
AMK>
AMK>2) Дерево произвольной структуры имеет следующее описание типа данных AMK>data Tree a = Node a [Tree a] AMK>то есть каждый узел дерева имеет список поддеревьев. Определить функцию обработки деревьев: AMK>height :: Tree a -> Int AMK>Вычисляет высоту дерева. AMK>
AMK>Огромная просьба не писать, что-то типа — читай с 35 по 306 стр. того-то учебника.
Re: Задачки на Haskell
От:
Аноним
Дата:
03.01.09 10:30
Оценка:
Здравствуйте, AeMK, Вы писали:
AMK>Доброго времени суток. Всех с Новым годом. AMK>Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:
Боже правый! В наших ВУЗах стали преподавать Haskell??
К>Haskell, который сочетает черты чисто функционального языка с возможностями объектно-ориентированного стиля программирования
К>что такое выделенная часть?
Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле
Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов,
алгебраические типы, плюс модули.
Зато в этой книжке нет слова монада
Здравствуйте, FR, Вы писали:
FR>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле
Как ООП на сях чтоль? FR>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов, FR>алгебраические типы, плюс модули.
А как там моделируются объекты с состоянием? Ну и как там identity реализуется?
FR>Зато в этой книжке нет слова монада
Вопрос только хорошо это или нет...
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, FR, Вы писали:
FR>>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле К>Как ООП на сях чтоль?
Ну в хаскеле должно быть проще.
FR>>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов, FR>>алгебраические типы, плюс модули. К>А как там моделируются объекты с состоянием? Ну и как там identity реализуется?
Никак. Там просто обясняется то что есть в хаскеле используя ООП понятия, Владу должно понравится
FR>>Зато в этой книжке нет слова монада К>Вопрос только хорошо это или нет...
Я читал только функциональную часть, вроде все неплохо и просто написано.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Курилка, Вы писали:
К>>Здравствуйте, FR, Вы писали:
FR>>>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле К>>Как ООП на сях чтоль?
FR>Ну в хаскеле должно быть проще.
Наверное, только по-моему не принципиальна тут эта разница.
FR>>>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов, FR>>>алгебраические типы, плюс модули. К>>А как там моделируются объекты с состоянием? Ну и как там identity реализуется?
FR>Никак. Там просто обясняется то что есть в хаскеле используя ООП понятия, Владу должно понравится
Т.е. подмена понятий и запутывание студентов? Неплохо, неплохо...
FR>>>Зато в этой книжке нет слова монада К>>Вопрос только хорошо это или нет...
FR> FR>Я читал только функциональную часть, вроде все неплохо и просто написано.
Ну яж сказал, что это "вопрос", универсального ответа у меня на него нет
Правда сам я склоняюсь к тому, что програмить реально на хаскеле и не понимать что жетакое монада по меньшей мере трудно. Тем более там и понимать не так чтоб много.
Кстати типизация и "функциональная часть" вещи по идее ортогональные (см. scheme например), а монада как раз по-моему в первую "попадает".
AMK>2) Дерево произвольной структуры имеет следующее описание типа данных AMK>data Tree a = Node a [Tree a] AMK>то есть каждый узел дерева имеет список поддеревьев. Определить функцию обработки деревьев: AMK>height :: Tree a -> Int AMK>Вычисляет высоту дерева. AMK>
{-# OPTIONS_GHC -XDeriveDataTypeable #-}import Data.Generics
data Tree a = Node a [Tree a] deriving (Typeable, Data, Show)
height = gdepth
Re[2]: Задачки на Haskell
От:
Аноним
Дата:
03.01.09 16:37
Оценка:
Здравствуйте, deniok, Вы писали:
D>
D>{-# OPTIONS_GHC -XDeriveDataTypeable #-}
D>import Data.Generics
D>data Tree a = Node a [Tree a] deriving (Typeable, Data, Show)
D>height = gdepth
D>
HMV>Считает правильно; дерево тут (в последнем примере) такое:
HMV>Соответственно, глубина считается как длина цепочки "Node — (:) — (:) — (:) — Node — 4"
Я знаю, что он в поиске максимальной подветви, прибавляет 1 не только в Node, но и в Cons. Так, собственно, кто нам сформулировал явно в задаче, что список мы должны плоско располагать, а?