Показано с 1 по 10 из 44

Тема: Макросы ОЛ: с побочными эффектами и/или детерминированные?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Давайте посмотрим на такой код на C:

    Код:
    int counter = 0;
    
    int abcd() {
      counter = counter + 1;
      return counter;
    }
    Внимание, вопрос: является ли функция abcd чистой?
    Очевидно, что IO эта функция не выполняет.
    Нет, поскольку эта функция может читать ввод посредством некой другой функции, которая будет записывать его в переменную counter.

    А в хаскеле вы из монады IO повлиять на состояние монады State не можете никак =)

  2. #2

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Нет, поскольку эта функция может читать ввод посредством некой другой функции, которая будет записывать его в переменную counter.
    Чего чего?
    "функция может читать ввод посредством некой другой функции" ?

    О чём вообще речь. IO в программе вообще не происходит. Тут же просто сложение.
    Скажите, пожалуйста, по какому принципу вы относите эту функцию abcd к нечистым?

    Я могу добавить больше ограничений: никакая другая функция не обращается к переменной counter. Ни пишет, ни читает.
    Что? abcd это чистая функция в таком случае?

  3. #3
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Чего чего?
    "функция может читать ввод посредством некой другой функции" ?

    О чём вообще речь. IO в программе вообще не происходит. Тут же просто сложение.
    Скажите, пожалуйста, по какому принципу вы относите эту функцию abcd к нечистым?
    Переменная которую использует эта функция глобальная. Её чтение равносильно чтению ввода, потому что к этой переменной имеет доступ любая функция в программе, в том числе и некая (предполагаемая) функция, которая может осуществлять ввод.
    То что этого не происходит в вашей конкретной программе не делает эту функцию чистой)
    Чистота функции - это свойство самой функции, оно не должно зависеть от того, как устроена ваша остальная программа.

  4. #4

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Чистота функции - это свойство самой функции, оно не должно зависеть от того, как устроена ваша остальная программа.
    О, я тоже так думаю.

    А такой код? Это чистая функция?
    На всякий, случай: static объявляет такую переменную, которая сохраняет своё состояние между вызовами функции
    Код:
    int abcd2() {
      static int counter; /* обращаем внимание на слово static */
      counter = counter + 1;
      return counter;
    }
    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Переменная которую использует эта функция глобальная. Её чтение равносильно чтению ввода, потому что к этой переменной имеет доступ любая функция в программе, в том числе и некая (предполагаемая) функция, которая может осуществлять ввод.
    Если вы говорите, что "чистота" это свойство самой функции, то непонятно как тут же поворачивается язык говорить о "к этой переменной имеет доступ некая (предполагаемая) функция, которая может осуществлять ввод".
    На этом моменте я вы предложил вам обратиться к определению чистой функции. И не к вашему личному определению, а определению из более надёжного источника. Wikipedia, книга, учебник, статья.

    В коде abcd2 к переменной counter уж точно никогда не сможет обратиться ни одна другая функция.
    Что? abcd2, получается, чистая функция?
    Последний раз редактировалось Владимир Ситников; 21.04.2017 в 14:31.

Похожие темы

  1. Специальные ,функционально законченные макросы
    от rovki в разделе Программируемые реле
    Ответов: 135
    Последнее сообщение: 14.02.2024, 12:43
  2. Универсальные макросы для OWEN Logic
    от rovki в разделе Среда программирования OWEN Logic
    Ответов: 827
    Последнее сообщение: 22.12.2023, 13:20
  3. макросы для ПР200.
    от Павел Братковский в разделе Среда программирования OWEN Logic
    Ответов: 174
    Последнее сообщение: 17.05.2020, 19:34
  4. Макросы для КаСкады
    от rovki в разделе Программируемые реле
    Ответов: 19
    Последнее сообщение: 04.09.2016, 10:08
  5. Макросы -- объясните немного....
    от tigdin в разделе Программируемые реле
    Ответов: 20
    Последнее сообщение: 28.08.2014, 15:18

Ваши права

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