LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы. Побочные эффекты производит не программа (файл), а среда выполнения, которая её выполняет.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать
  • программа ничего не берёт из внешнего мира, кроме входных параметров, которые возможно предоставить до начала вычисления
  • программа ничего не меняет во внешнем мире, кроме затрат ресурсов на своё вычисление и возврата результата в конце вычисления
  • результат сам по себе пассивен и является данными. Если направить его в /dev/null, то в мире ничего не изменится, только счётчик электричества немного накрутится

Для программы в IO неверно ни одно из этих утверждений. Что тогда позволяет называть её функциональной?

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Из двух частей определения функциональности содержательной выглядит та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (независимость результата от внешнего мира; отсутствие влияния на внешний мир, кроме возврата результата; детерминированность; мемоизация; возможность вычислений во время компиляции; возможность суждений о параллельности и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исправление den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы. Побочные эффекты производит не программа (файл), а среда выполнения, которая её выполняет.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать
  • программа ничего не берёт из внешнего мира, кроме входных параметров
  • программа ничего не меняет во внешнем мире, кроме затрат ресурсов на своё вычисление и возврата результата (который сам по себе пассивен и является данными).

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Из двух частей определения функциональности содержательной выглядит та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (независимость результата от внешнего мира; отсутствие влияния на внешний мир, кроме возврата результата; детерминированность; мемоизация; возможность вычислений во время компиляции; возможность суждений о параллельности и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исправление den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы. Побочные эффекты производит не программа (файл), а среда выполнения, которая её выполняет.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Из двух частей определения функциональности содержательной выглядит та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (независимость результата от внешнего мира; отсутствие влияния на внешний мир, кроме возврата результата; детерминированность; мемоизация; возможность вычислений во время компиляции; возможность суждений о параллельности и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исправление den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы. Побочные эффекты производит не программа (файл), а среда выполнения, которая её выполняет.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Из двух частей определения функциональности содержательной выглядит та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (независимость результата от внешнего мира, отсутствие влияния на внешний мир, кроме возврата результата, детерминированность, мемоизация, возможность вычислений во время компиляции и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исправление den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы. Побочные эффекты производит не программа (файл), а среда выполнения, которая её выполняет.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Т.е. из двух частей определения функциональности содержательной является именна та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (детерминированность, мемоизация, возможность вычислений во время компиляции и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исправление den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы.

Вот предлагаю критерий того, что программа чисто функциональная:

  • её результат детерминирован
  • результат можно мемоизировать

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Т.е. из двух частей определения функциональности содержательной является именна та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (детерминированность, мемоизация, возможность вычислений во время компиляции и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.

Исходная версия den73, :

Побочные эффекты будет производить (возможно) читатель справочника. Сам справочник (или программа, возвращающая результатом этот справочник) побочных эффектов не производит.

Это верно для любой императивной программы, да и вообще для любой программы.

Вот предлагаю критерий того, что программа чисто функциональная:

-- её результат детерминирован -- результат можно мемоизировать

Для программы в IO ни то, ни то неверно. Не будем лучше об этом :)

Лисп всегда был функциональным языком

Это вопрос терминологии. Я всегда считал и считаю, что CL - это императивный язык. Да, в нём есть лямбды, но ведь и лямбды в нём императивны. Т.е. из двух частей определения функциональности содержательной является именна та, которая связана с чистотой функций, т.к. из этого следует много нетривиальных следствий (детерминированность, мемоизация, возможность вычислений во время компиляции и т.п.). А отличие CL от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.