~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ C874C393FD8910FF50AEA6B37C3D64D2__1658306160 ✰
Заголовок документа оригинал.:
✰ Total functional programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Тотальное функциональное программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Total_functional_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/c8/d2/c874c393fd8910ff50aea6b37c3d64d2.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/c8/d2/c874c393fd8910ff50aea6b37c3d64d2__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:33:20 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 20 July 2022, at 11:36 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Тотальное функциональное программирование — Википедия Jump to content

Полное функциональное программирование

Из Википедии, бесплатной энциклопедии

Тотальное функциональное программирование (также известное как сильное функциональное программирование) . [1] в отличие от обычного или слабого функционального программирования ) — парадигма программирования , которая ограничивает диапазон программ теми, которые доказуемо завершаются . [2]

Ограничения [ править ]

Прекращение действия гарантируется следующими ограничениями:

  1. Ограниченная форма рекурсии , которая работает только с «сокращенными» формами своих аргументов, такими как рекурсия Вальтера , субструктурная рекурсия или «сильная нормализация», что доказано абстрактной интерпретацией кода. [3]
  2. Каждая функция должна быть полной (а не частичной ) функцией. То есть у него должно быть определение всего, что находится внутри его области.
    • Существует несколько возможных способов расширить часто используемые частичные функции, такие как деление, до суммы: выбор произвольного результата для входных данных, на которых функция обычно не определена (например, для деления); добавление еще одного аргумента для указания результата для этих входных данных; или исключить их с помощью функций системы типов, таких как уточненные типы . [2]

Эти ограничения означают, что полное функциональное программирование не является полным по Тьюрингу . Однако набор алгоритмов, которые можно использовать, по-прежнему огромен. Например, любой алгоритм, для которого можно вычислить асимптотическую верхнюю границу (с помощью программы, которая сама использует только рекурсию Вальтера), можно тривиально преобразовать в доказуемо завершающую функцию, используя верхнюю границу в качестве дополнительного аргумента, уменьшаемого на каждую итерацию или рекурсию. .

Например, быстрая сортировка не является тривиально субструктурно-рекурсивной, но она рекурсивна только до максимальной глубины длины вектора (временная сложность в худшем случае O ( n 2 )). Реализация быстрой сортировки в списках (которая будет отклонена субструктурной рекурсивной проверкой) с использованием Haskell :

import   Data.List   (  раздел  ) 

 qsort   []         =   [] 
 qsort   [  a  ]        =   [  a  ] 
 qsort   (  a  :  as  )     =   ​​let   (  меньше  ,   больше  )   =   раздел   (  <  a  )   как 
                  в   qsort   lesser   ++   [  a  ]   + +   qсортировать   больше 

Чтобы сделать его субструктурно-рекурсивным, используя длину вектора в качестве ограничения, мы могли бы сделать:

import   Data.List   (  раздел  ) 

 qsort   x   =   qsortSub   x   x 
 — минимальный регистр 
 qsortSub   []       as       =   as   — показывает завершение 
 — стандартные случаи 
 qsort qsortSub   (  l  :  ls  )   []       =   []   — нерекурсивный, поэтому принят 
 qsortSub   (  l  :  ls  )   [  a  ]      ​​=   [  a  ]   ​​-- нерекурсивно, поэтому принято 
 qsortSub   (  l  :  ls  )   (  a  :  as  )   =   let   (  lesser  ,   more  )   =   part   (  <  a  )   as 
                             -- рекурсивно, но рекурсивно ls, который является подструктурой 
                             его первого ввода. 
                           в   qsortSub   ls   lesser   ++   [  a  ]   ​​++   qsortSub   ls   больше 

Некоторые классы алгоритмов не имеют теоретической верхней границы, но имеют практическую верхнюю границу (например, некоторые эвристические алгоритмы могут быть запрограммированы так, чтобы «сдаваться» после стольких рекурсий, что также обеспечивает завершение).

Другим результатом тотального функционального программирования является то, что и строгая оценка , и ленивая оценка , в принципе, приводят к одному и тому же поведению; однако тот или иной вариант все же может быть предпочтительнее (или даже необходим) по соображениям производительности. [4]

В тотальном функциональном программировании различают данные и кодаты : первые являются финитными , а вторые потенциально бесконечны. Такие потенциально бесконечные структуры данных используются для таких приложений, как ввод-вывод . Использование кодатов влечет за собой использование таких операций, как corecursion . Однако можно выполнять ввод-вывод на функциональном языке программирования (с зависимыми типами ) и без кодовых данных. [5]

И Epigram , и Charity можно считать полностью функциональными языками программирования, хотя они и не работают так, как указывает Тернер в своей статье. То же самое можно сделать и с программированием непосредственно в простой системе F , в теории типов Мартина-Лёфа или в исчислении конструкций .

См. также [ править ]

Ссылки [ править ]

  1. ^ Этот термин обусловлен: Тернер, Д.А. (декабрь 1995 г.). Элементарное сильное функциональное программирование . Первый международный симпозиум по языкам функционального программирования в образовании. Спрингер ЛНКС. Том. 1022. стр. 1–13. .
  2. ^ Перейти обратно: а б Тернер, Д.А. (28 июля 2004 г.), «Тотальное функциональное программирование» , Журнал Universal Computer Science , 10 (7): 751–768, doi : 10.3217/jucs-010-07-0751
  3. ^ Тернер, Д.А. (28 апреля 2000 г.), «Обеспечение завершения работы в ESFP» , Journal of Universal Computer Science , 6 (4): 474–488, doi : 10.3217/jucs-006-04-0474
  4. ^ Различия между ленивой и нетерпеливой оценкой обсуждаются в: Гранстрём, Дж. Г. (2011). Трактат по интуиционистской теории типов . Логика, эпистемология и единство науки. Том. 7. ISBN  978-94-007-1735-0 . См., в частности, стр. 86–91.
  5. ^ Гранстрем, Дж. Г. (май 2012 г.), «Новая парадигма разработки на основе компонентов», Journal of Software , 7 (5): 1136–1148, doi : 10.4304/jsw.7.5.1136-1148 [ мертвая ссылка ] Архивная копия
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: C874C393FD8910FF50AEA6B37C3D64D2__1658306160
URL1:https://en.wikipedia.org/wiki/Total_functional_programming
Заголовок, (Title) документа по адресу, URL1:
Total functional programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)