OberonCore https://forum.oberoncore.ru/ |
|
ФП и "Конструкция AND THEN?" https://forum.oberoncore.ru/viewtopic.php?f=72&t=3178 |
Страница 1 из 1 |
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 00:09 ] |
Заголовок сообщения: | ФП и "Конструкция AND THEN?" |
Выделено: viewtopic.php?p=57987#p57987 Монада Maybe с ручным приводом Кстати, монад в хаскеле, как языке, нет. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 07:35 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Alexey Veselovsky писал(а): Монада Maybe с ручным приводом Похоже, но не совсем:википедия писал(а): Maybe (монада вычислений с отсутствующими значениями): стратегия связывания — «если первое вычисление дало результат, то второе; иначе — отсутствие результата»; то есть с помощью монады Maybe не получится выяснить, на каком этапе произошёл сбой; также нет ветки ELSE. Но, в принципе, думаю, нетрудно сделать нужный вариант такой монады, будет время, попробую...Что бы номер сбойной ветки получить, возможно, придётся трансформатором монад совместить Maybe и State. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 08:35 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Alexey Veselovsky писал(а): Кстати, монад в хаскеле, как языке, нет. В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 15:11 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Geniepro писал(а): Но, в принципе, думаю, нетрудно сделать нужный вариант такой монады, будет время, попробую... Что-то подобное нарисовал: viewtopic.php?f=72&t=3177
|
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 15:36 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Geniepro писал(а): Alexey Veselovsky писал(а): Кстати, монад в хаскеле, как языке, нет. В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад. Но не обязательно монад. Это просто синтаксис. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 15:51 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Alexey Veselovsky писал(а): Geniepro писал(а): В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад. Но не обязательно монад. Это просто синтаксис. |
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 16:13 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Почему именно монадных? Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 18:23 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Alexey Veselovsky писал(а): Почему именно монадных? Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада. Эти "операторы" являются функциями класса Monad. Если Вы определите их как-то по другому, то нарушите для них монадный контракт (или как там можно это назвать). |
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 18:29 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Geniepro писал(а): Alexey Veselovsky писал(а): Почему именно монадных? Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада. Эти "операторы" являются функциями класса Monad. Если Вы определите их как-то по другому, то нарушите для них монадный контракт (или как там можно это назвать). А если я не буду импортировать модули где определен класс Monad? Класс Monad это библиотека, а я говорю про язык. Опять же, контракта этого в языке нет. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 18:54 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Alexey Veselovsky писал(а): А если я не буду импортировать модули где определен класс Monad? Тогда у Вас могут возникнуть всякие проблемы при использовании этих операций..Класс Monad это библиотека, а я говорю про язык. Alexey Veselovsky писал(а): Опять же, контракта этого в языке нет. Do-нотация ориентирована на этот контракт, так что какая-то привязка языка к монадам таки есть.
|
Автор: | Geniepro [ Среда, 19 Январь, 2011 18:56 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Alexey Veselovsky писал(а): А если я не буду импортировать модули где определен класс Monad? Класс Monad это библиотека, а я говорю про язык. Класс Monad определён в модуле Prelude, который входит в стандарт языка. Можно, конечно, импортировать Prelude с указанием не импортировать класс Monad, но зачем? |
Автор: | Geniepro [ Среда, 19 Январь, 2011 18:57 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Alexey Veselovsky писал(а): Почему именно монадных? Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада. Хорошо, покажите пример, может тогда будет видно, для чего это полезно и чем вредит... |
Автор: | Geniepro [ Среда, 19 Январь, 2011 23:03 ] |
Заголовок сообщения: | Re: ФП и "Конструкция AND THEN?" |
Илья Ермаков писал(а): Да, мне представляется хорошим вот такой вариант: Код: step := 1; ok := TRUE; WHILE (step # 3) & ok DO CASE step OF | 1: Первый этап; ok := первый этап успешен | 2: Второй этап; ok := второй этап успешен END; INC(step) END Однако такой кунштюк пройдёт в императивном языке, а у меня сейчас были такие длиннючие цепи на функциональном - XQuery - и вот там только вложенностью Даже простейший ok не сделаешь. Навскидку пара вариантов на Хаскелле (не знаю я этого Вашего XQuery): Код: foo False x = return () -- Этап x был неуспешен foo True 3 = return () -- Все этапы прошли успешно foo ok step = do ok' <- case step of 1 -> do Первый этап return $ первый этап успешен 2 -> do Второй этап return $ второй этап успешен foo ok' $ step+1 Код: boo 1 True = do Первый этап
boo 2 $ первый этап успешен boo 2 True = do Второй этап boo 3 $ второй этап успешен boo 3 True = return () -- Все этапы прошли успешно boo x False = return () -- Этап x был неуспешен |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |