Задачки на Haskell
От: AeMK  
Дата: 03.01.09 00:03
Оценка:
Доброго времени суток. Всех с Новым годом.
Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:



Огромная просьба не писать, что-то типа — читай с 35 по 306 стр. того-то учебника.
Re: Задачки на Haskell
От: VoidEx  
Дата: 03.01.09 00:55
Оценка:
Здравствуйте, AeMK, Вы писали:

AMK>Доброго времени суток. Всех с Новым годом.

AMK>Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:

AMK>

count c = length . elemIndices c
removeDoubleStars = filter (\x -> count '*' x <= 1)



AMK>

height (Node _ []) = 1
height (Node _ ts) = 1 + (maximum . map height) ts



AMK>Огромная просьба не писать, что-то типа — читай с 35 по 306 стр. того-то учебника.
Re: Задачки на Haskell
От: Аноним  
Дата: 03.01.09 10:30
Оценка:
Здравствуйте, AeMK, Вы писали:

AMK>Доброго времени суток. Всех с Новым годом.

AMK>Нужна помощь, помогите, пожалуйста, решить несколько задач по Haskell:

Боже правый! В наших ВУЗах стали преподавать Haskell??
Re[2]: Задачки на Haskell
От: deniok Россия  
Дата: 03.01.09 10:30
Оценка: +1
Здравствуйте, VoidEx, Вы писали:


VE>
VE>count c = length . elemIndices c
VE>removeDoubleStars = filter (\x -> count '*' x <= 1)
VE>


Несколько эффективней будет без length, которая для наших целей избыточно энергична
noMoreThan n  = null . drop n
removeDoubleStars = filter $ noMoreThan 1 . elemIndices '*'
Re[2]: Задачки на Haskell
От: BulatZiganshin  
Дата: 03.01.09 10:46
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>height (Node _ []) = 1

VE>height (Node _ ts) = 1 + (maximum . map height) ts

height (Node _ ts) = 1 + (maximum . (0 . map height) ts

а ещё круче было бы

height = (1+) . (maximum . (0 . map height) . snd

если бы хаскел автоматом определял snd как метод, вытаскивающий вторую компоненту из любой записи
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Задачки на Haskell
От: FR  
Дата: 03.01.09 10:55
Оценка:
Здравствуйте, http://migmit.vox.com/, Вы писали:

HMV>Боже правый! В наших ВУЗах стали преподавать Haskell??


Первое издание этой http://www.bolero.ru/books/9785276010397.html книги было в 2002 году.
Re[3]: Задачки на Haskell
От: BulatZiganshin  
Дата: 03.01.09 10:56
Оценка: +1
Здравствуйте, deniok, Вы писали:

D>Несколько эффективней будет без length, которая для наших целей избыточно энергична


в данном случае можно сделать проще:

removeDoubleStars = filter (not . isPrefixOf "**" . filter(=='*'))
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Задачки на Haskell
От: Курилка Россия http://kirya.narod.ru/
Дата: 03.01.09 11:05
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, http://migmit.vox.com/, Вы писали:


HMV>>Боже правый! В наших ВУЗах стали преподавать Haskell??


FR>Первое издание этой http://www.bolero.ru/books/9785276010397.html книги было в 2002 году.


Может я что-то "не догоняю", вот тут

Haskell, который сочетает черты чисто функционального языка с возможностями объектно-ориентированного стиля программирования

что такое выделенная часть?
Re[4]: Задачки на Haskell
От: FR  
Дата: 03.01.09 11:16
Оценка:
Здравствуйте, Курилка, Вы писали:


К>Может я что-то "не догоняю", вот тут

К>

К>Haskell, который сочетает черты чисто функционального языка с возможностями объектно-ориентированного стиля программирования

К>что такое выделенная часть?

Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле
Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов,
алгебраические типы, плюс модули.
Зато в этой книжке нет слова монада
Re[5]: Задачки на Haskell
От: Курилка Россия http://kirya.narod.ru/
Дата: 03.01.09 11:21
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле

Как ООП на сях чтоль?
FR>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов,
FR>алгебраические типы, плюс модули.
А как там моделируются объекты с состоянием? Ну и как там identity реализуется?

FR>Зато в этой книжке нет слова монада

Вопрос только хорошо это или нет...
Re[6]: Задачки на Haskell
От: FR  
Дата: 03.01.09 11:29
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, FR, Вы писали:


FR>>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле

К>Как ООП на сях чтоль?

Ну в хаскеле должно быть проще.

FR>>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов,

FR>>алгебраические типы, плюс модули.
К>А как там моделируются объекты с состоянием? Ну и как там identity реализуется?

Никак. Там просто обясняется то что есть в хаскеле используя ООП понятия, Владу должно понравится

FR>>Зато в этой книжке нет слова монада

К>Вопрос только хорошо это или нет...


Я читал только функциональную часть, вроде все неплохо и просто написано.
Re[7]: Задачки на Haskell
От: Курилка Россия http://kirya.narod.ru/
Дата: 03.01.09 11:35
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, FR, Вы писали:


FR>>>Так вроде в Хаскеле вполне можно писать в объектно-ореинтированном стиле

К>>Как ООП на сях чтоль?

FR>Ну в хаскеле должно быть проще.

Наверное, только по-моему не принципиальна тут эта разница.

FR>>>Долистал до главы про ООП вроде никакой ереси нет, объяснятся Хаскелевские классы типов,

FR>>>алгебраические типы, плюс модули.
К>>А как там моделируются объекты с состоянием? Ну и как там identity реализуется?

FR>Никак. Там просто обясняется то что есть в хаскеле используя ООП понятия, Владу должно понравится


Т.е. подмена понятий и запутывание студентов? Неплохо, неплохо...

FR>>>Зато в этой книжке нет слова монада

К>>Вопрос только хорошо это или нет...

FR>

FR>Я читал только функциональную часть, вроде все неплохо и просто написано.

Ну яж сказал, что это "вопрос", универсального ответа у меня на него нет
Правда сам я склоняюсь к тому, что програмить реально на хаскеле и не понимать что жетакое монада по меньшей мере трудно. Тем более там и понимать не так чтоб много.
Кстати типизация и "функциональная часть" вещи по идее ортогональные (см. scheme например), а монада как раз по-моему в первую "попадает".
Re: Задачки на Haskell
От: deniok Россия  
Дата: 03.01.09 12:49
Оценка: 7 (2)
Здравствуйте, AeMK, Вы писали:

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>


D>


Извини, но gdepth — это са-а-авсем другая штука.


*Main> gdepth $ Node 1 []
Loading package syb ... linking ... done.
2
*Main> gdepth $ Node 1 [Node 2 []]
4
*Main> gdepth $ Node 1 [Node 2 [], Node 3 []]
5
*Main> gdepth $ Node 1 [Node 2 [], Node 3 [], Node 4 []]
6


Считает правильно; дерево тут (в последнем примере) такое:

Node
|- 1
|- (:)
   |- Node
   |  |- 2
   |  |- []
   |- (:)
      |- Node
      |  |- 3
      |  |- []
      |- (:)
         |- Node
         |  |- 4
         |  |- []
         |- []


Соответственно, глубина считается как длина цепочки "Node — ( — ( — ( — Node — 4"
Re[3]: Задачки на Haskell
От: Аноним  
Дата: 03.01.09 16:39
Оценка:
HMV>Соответственно, глубина считается как длина цепочки "Node — ( — ( — ( — Node — 4"

За смайлики — повбывав бы.
Re[3]: Задачки на Haskell
От: deniok Россия  
Дата: 03.01.09 17:28
Оценка:
Здравствуйте, http://migmit.vox.com/, Вы писали:


HMV>Извини, но gdepth — это са-а-авсем другая штука.


Ты смайл у меня в конце видел?


HMV>
HMV>*Main> gdepth $ Node 1 [Node 2 [], Node 3 [], Node 4 []]
HMV>6
HMV>


HMV>Считает правильно; дерево тут (в последнем примере) такое:


HMV>Соответственно, глубина считается как длина цепочки "Node — (:) — (:) — (:) — Node — 4"


Я знаю, что он в поиске максимальной подветви, прибавляет 1 не только в Node, но и в Cons. Так, собственно, кто нам сформулировал явно в задаче, что список мы должны плоско располагать, а?
Re[4]: Задачки на Haskell
От: deniok Россия  
Дата: 03.01.09 17:28
Оценка:
Здравствуйте, http://migmit.vox.com/, Вы писали:

HMV>>Соответственно, глубина считается как длина цепочки "Node — (:) — (:) — (:) — Node — 4"


HMV>За смайлики — повбывав бы.


Там чекбоксик есть — "отключить смайлики"
Re[5]: Задачки на Haskell
От: Аноним  
Дата: 04.01.09 21:42
Оценка:
D>Там чекбоксик есть — "отключить смайлики"

Я это, блин, сделал! Оба раза.
Re: Задачки на Haskell
От: AeMK  
Дата: 06.01.09 00:26
Оценка:
Люди добрые, всем огромное спасибо, очень помогли!
Re: Задачки на Haskell
От: AeMK  
Дата: 06.01.09 00:28
Оценка:
Люди добрые, всем огромное спасибо, очень помогли!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.