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-синтаксис, фактически это языковая поддержка удобного использования монад.
Но не обязательно монад. Это просто синтаксис.
А для чего же ещё? Ведь при трансляции 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/