История изменений
Исправление 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 от Си ,когда он возвращает истинную функцию, а не какое-то мусорное ведро, как в моих эрзац-композициях - это вопрос терминологии (что называть функцией) и удобства (удобно ли вызывать эрзац-функцию). Никакой новой математики эта часть определения не добавляет. Поэтому если мы говорим о ФП по существу, я бы выделил именно чистоту.