Re[2]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.03.09 18:09
Оценка:
Здравствуйте, qomp, Вы писали:

Q>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...


А какой смысл ты видишь в монадах для динамическитипизированного языка?
В принципе, конечно, можно что-нибудь изобразить, но смысл?
Re[3]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 19.03.09 21:44
Оценка:
Q>>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...
К>А какой смысл ты видишь в монадах для динамическитипизированного языка?
К>В принципе, конечно, можно что-нибудь изобразить, но смысл?

Имеет некоторый смысл.

Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[4]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.03.09 22:02
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.


Ну если явно протягивать, то так же почти все процессы на Эрланге работают, но какой плюс тут от монадности? Может, я как человек, ещё не написавший свой monad tutorial, просто не вижу его?
Re[5]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 20.03.09 09:41
Оценка:
T>>Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.

К>Ну если явно протягивать, то так же почти все процессы на Эрланге работают, но какой плюс тут от монадности? Может, я как человек, ещё не написавший свой monad tutorial, просто не вижу его?


Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.

Типа, здесь мы играем, а здесь рыбу заворачиваем. Получаются ноты.

Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).

Вот.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.03.09 10:14
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.

Продемонстрировать нельзя по NDA чтоль?

T>Типа, здесь мы играем, а здесь рыбу заворачиваем. Получаются ноты.

Как-то ну очень чёткое описание

T>Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).


И где тут состояние? Значение average() у тебя типа неявно передаётся?
Re[7]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 20.03.09 10:36
Оценка:
T>>Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.
К>Продемонстрировать нельзя по NDA чтоль?

Да я детали забыл. Это было почти год назад и меня никогда котировки очень не интересовали.

T>>Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).

К>И где тут состояние? Значение average() у тебя типа неявно передаётся?

Ну, да.

minus opa opb = combineTickets (-) opa opb
(про combineTickets не спрашивай. он был чем-то между zipWith и liftM2.

Ты не смотри, что я использовал signal(), который ничего не делает. На его место можно подставить любое выражение, например, average с параметром или что другое.

Плохо, что при использовании монадного ситнаксиса в Эрланге будет много скобок.

И тяжело сделать приличный синтаксис для не детерминированных монад, List, например.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[3]: Монады
От: qomp Украина  
Дата: 20.03.09 11:37
Оценка:
Здравствуйте, Курилка, Вы писали:

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


Q>>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...


К>А какой смысл ты видишь в монадах для динамическитипизированного языка?

Прежде всего Erlang — декларативный язык и мне не понятно, в чем его дополнительная возможность быть динамическитипизированным отменяет
удобство монад, когда надо манипулировать состоянием.
К>В принципе, конечно, можно что-нибудь изобразить, но смысл?
Вот здесь ссылки http://www.acooke.org/cute/ErlangsSyn0.html, http://www.acooke.org/cute/MonadsinEr0.html — мужик не очень подробно написал, но мне показалось, что в этом есть какой то смысл пока еще разбираюсь...
Предварительно идея такая, как минимум парсер и конструктор синтаксических конструкций(Wiki-разметка,Текст, Html и т.д.),обработчик рекурсивных структур из кортежей и списков с использованием нечеткой логики.
Re: Монады
От: nikov США http://www.linkedin.com/in/nikov
Дата: 04.06.09 15:39
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Теперь, чтобы выполнить этот список действий, необходимо выполнить каждое из них по очереди.


ЕКA>
ЕКA>doIOs [] = return []
ЕКA>doIOs (a:as) = do a ; doIOs as 

ЕКA>doIOs (map putStrLn values)
ЕКA>


ЕКA>Если мы посмотрим в интерпретаторе на тип doIOs, то получится, что он – doIOs :: (Monad m) => [m a] -> m [a] . В нем не упоминается монада IO, он ЕКA>работает одинаково для всех монад! Логично слово «IO» убрать и из названия – получится стандартная функция


ЕКA>
ЕКA>sequence :: Monad m => [m a] -> m [a]
ЕКA>


Здесь пара неточностей. Во-первых, тип такой функции doIOs получится doIOs :: (Monad m) => [m a] -> m [b]. Во-вторых, чтобы эта функция собирала результаты и была эквивалентна sequence, ее надо переписать чуть посложнее:

doIOs [] = return []
doIOs (a:as) = do x <- a; xs <- doIOs as; return (x:xs)
Re: Монады
От: Аноним  
Дата: 05.08.09 22:06
Оценка: 2 (1)
Мне кажется, что в текст статьи вкралась ошибка.

Из-за реализации функции freqs и того способа, которым она используется, результаты будут неверные.
Если в списке, который принимает в качестве аргумента функция freqs, более двух элементов, второй элемент списка выберется не с вероятностью w2, как ожидается, а с вероятностью w2*(1-w1).

Привожу свой расчёт вероятности столкновения при красном свете. Событие "столкновение" — это объединение несовместных событий вида
"первый водитель имеет тип 'А' И второй водитель имеет тип 'Б' И первый поехал И второй поехал И столкнулись".
Так как осторожные водители на красный свет не едут, задача упрощается.
data Drivers = Normal | Aggressive

p Normal = 0.6
p Aggressive = 0.2

pDrive Normal = 0.1
pDrive Aggressive = 0.3

pCollisionIf2Drive = 0.3

d = [Aggressive, Normal]

p2Dr = sum [p d1 * p d2 * pDrive d1 * pDrive d2 | d1 <- d, d2 <- d]

main = print $ pCollisionIf2Drive * p2Dr


Результат — 0.00432, не такой, как статье.
--
Gebb
Re: Монады
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.08.09 23:45
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Статья:

ЕКA>Монады
Автор(ы): Евгений Кирпичев aka jkff
Дата: 28.12.2008
Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.


По-моему, это
Автор: BulatZiganshin
Дата: 08.02.07
— одно из самых простых и понятных объяснений того, что такое монады, из тех, что я видел на русском языке. Даже я понял, что там написано
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.