OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 21:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 00:09 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Выделено: viewtopic.php?p=57987#p57987

Монада Maybe с ручным приводом :-) Кстати, монад в хаскеле, как языке, нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 07:35 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
Монада Maybe с ручным приводом :-)
Похоже, но не совсем:
википедия писал(а):
Maybe (монада вычислений с отсутствующими значениями): стратегия связывания — «если первое вычисление дало результат, то второе; иначе — отсутствие результата»;
то есть с помощью монады Maybe не получится выяснить, на каком этапе произошёл сбой; также нет ветки ELSE. Но, в принципе, думаю, нетрудно сделать нужный вариант такой монады, будет время, попробую...
Что бы номер сбойной ветки получить, возможно, придётся трансформатором монад совместить Maybe и State.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 08:35 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
Кстати, монад в хаскеле, как языке, нет.

В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 15:11 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Geniepro писал(а):
Но, в принципе, думаю, нетрудно сделать нужный вариант такой монады, будет время, попробую...
Что-то подобное нарисовал: viewtopic.php?f=72&t=3177


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 15:36 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Geniepro писал(а):
Alexey Veselovsky писал(а):
Кстати, монад в хаскеле, как языке, нет.

В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад.

Но не обязательно монад. Это просто синтаксис.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 15:51 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
Geniepro писал(а):
В Хаскелле есть do-синтаксис, фактически это языковая поддержка удобного использования монад.
Но не обязательно монад. Это просто синтаксис.
А для чего же ещё? Ведь при трансляции do-выражения раскрываются в цепочку монадных операций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 16:13 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Почему именно монадных? :-)
Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 18:23 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
Почему именно монадных? :-)
Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада.

Эти "операторы" являются функциями класса Monad. Если Вы определите их как-то по другому, то нарушите для них монадный контракт (или как там можно это назвать).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 18:29 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Geniepro писал(а):
Alexey Veselovsky писал(а):
Почему именно монадных? :-)
Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада.

Эти "операторы" являются функциями класса Monad. Если Вы определите их как-то по другому, то нарушите для них монадный контракт (или как там можно это назвать).

А если я не буду импортировать модули где определен класс Monad? :-)
Класс Monad это библиотека, а я говорю про язык.

Опять же, контракта этого в языке нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 18:54 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
А если я не буду импортировать модули где определен класс Monad? :-)
Класс Monad это библиотека, а я говорю про язык.
Тогда у Вас могут возникнуть всякие проблемы при использовании этих операций..

Alexey Veselovsky писал(а):
Опять же, контракта этого в языке нет.
Do-нотация ориентирована на этот контракт, так что какая-то привязка языка к монадам таки есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 18:56 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
А если я не буду импортировать модули где определен класс Monad? :-)
Класс Monad это библиотека, а я говорю про язык.

Класс Monad определён в модуле Prelude, который входит в стандарт языка. Можно, конечно, импортировать Prelude с указанием не импортировать класс Monad, но зачем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 18:57 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Alexey Veselovsky писал(а):
Почему именно монадных? :-)
Оператор >> и >>= можно опередить как угодно. Это совсем не обязательно будет монада.

Хорошо, покажите пример, может тогда будет видно, для чего это полезно и чем вредит...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ФП и "Конструкция AND THEN?"
СообщениеДобавлено: Среда, 19 Январь, 2011 23:03 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Да, мне представляется хорошим вот такой вариант:
Код:
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 был неуспешен


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB