На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (6) « Первая ... 4 5 [6]  все  ( Перейти к последнему сообщению )  
> Erlang vs Haskel
    Цитата korvin @
    А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме.

    Оператора ";" увы не существует.
    По крайней мере в существующих языках программирования.
    https://en.wikipedia.org/wiki/Operator_%28c..._programming%29
    Общепринятое определение оператора:
    Цитата
    an operator is an object that is capable of manipulating a value
      Цитата korvin @
      Цитата D_KEY @
      Но вообще это бесполезная для С++ штука. Монада для списков и то полезнее.

      А вот чистому Си не повредили бы, чтобы проверки кодов ошибок синтаксически лучше выглядели б.

      Ты имеешь в виду что-то вроде монады Either? Или ты вообще вне контекста обсуждения монад?

      Добавлено
      Цитата Oleg2004 @
      Цитата korvin @
      А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме.

      Оператора ";" увы не существует.
      По крайней мере в существующих языках программирования.
      https://en.wikipedia.org/wiki/Operator_%28c..._programming%29
      Общепринятое определение оператора:
      Цитата
      an operator is an object that is capable of manipulating a value

      Ну вот монады позволяют как бы пеегружать ;
      Не в C++ :)
        Цитата D_KEY @
        Ну вот монады позволяют как бы пеегружать ;

        Скорее всего тогда он не соответствует определению оператора. :)
        Могу согласиться, что разделитель(delimiter) может быть в любом языке определен как что угодно. Попробуйте перегрузить пробел " ". Это однопозиционный разделитель, который в современных языках не есть оператор ни в коем случае...
        Не хватает семантики для существующих на клавиатуре одноклавишных символов - выдумываем двупозиционные, трех и т.д. В Javascript не шли путем перегрузки, а тупо вводили 3-х, 4-х и 5-ти позиционные.
        Мне такой подход виден более очевидным.
        Сообщение отредактировано: Oleg2004 -
          Цитата korvin @
          В Rust, я так понимаю, это сделали через макрос try! ?
          Можно и так сказать, но всё-таки этот макрос недостаточно гибкий и вообще выглядит костылём для
          ExpandedWrap disabled
            if (error) {
                return error;
            }

          Чуть получше выглядят функции map/map_or/map_or_else/ для Option, но получается многословно. do-нотацию на макросах пытались делать, но выглядит тоже страшненько, кроме самых простых случаев:
          ExpandedWrap disabled
            let l = mdo! {
                    z =<< 1i32..11;
                    x =<< 1..z;
                    y =<< x..z;
                    when x * x + y * y == z * z;
                    ret ret((x, y, z))
                }.collect::<Vec<_>>();
          Сообщение отредактировано: DarkEld3r -
            Цитата DarkEld3r @
            но выглядит тоже страшненько

            Да вроде не так и страшно. Особенно на фоне синтаксиса rust :D
              Цитата D_KEY @
              Ты имеешь в виду что-то вроде монады Either?

              Да, типа того. Конечно, есть ещё куча нюансов.

              Добавлено
              Цитата Oleg2004 @
              Скорее всего тогда он не соответствует определению оператора. :)

              Почему? Наоборот же, обычный оператор типа (Monad m => forall a b. m a -> (a -> m b) -> m b). Или я тебя не так понял?
                Цитата korvin @
                Цитата D_KEY @
                Ты имеешь в виду что-то вроде монады Either?

                Да, типа того. Конечно, есть ещё куча нюансов.

                Ну можно сделать для C++, примерно как я показал. Только синтаксически ты сам видел, какой отстой. А do-нотацию не сделать.
                  Цитата Oleg2004 @
                  D_KEY
                  OffTop
                  Флеймовый рейтинг свой видели??? >:(

                  Ага :) Этот то ли смайк то ли ещё кто многим активным участникам политики "подарки" сделал
                  Довольно однообразные, кстати.
                    Ну я на 100% не уверен, что это смайк.
                      Цитата korvin @
                      Наоборот же, обычный оператор типа (Monad m => forall a b. m a -> (a -> m b) -> m b). Или я тебя не так понял?

                      Операторов типа не существует как класса.
                      Так же как не существуют операторы DECLARE, IF, FOR, CASE и прочая. :yes:
                      Сообщение отредактировано: Oleg2004 -
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0368 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:52 GMT ]