Jump to content

ФП (язык программирования)

(Перенаправлено с FFP (язык программирования) )
ФП
Парадигма Функциональный уровень
Разработано Джон Бэкус
Впервые появился 1977
Диалекты
ФП84
Под влиянием
АПЛ [1]
Под влиянием
Флорида , Хаскелл , Джой

FP (сокращение от функционального программирования ) [2] — это язык программирования, созданный Джоном Бэкусом для поддержки программирования на уровне функций. [2] парадигма. Он позволяет создавать программы из набора обычно полезных примитивов и избегать именованных переменных (стиль, также называемый неявным программированием или «бесточечным программированием»). На него сильно повлиял APL, разработанный Кеннетом Э. Айверсоном в начале 1960-х годов. [3]

Язык FP был представлен в статье Бэкуса на Премии Тьюринга 1977 года «Можно ли программирование освободиться от стиля фон Неймана?» с подзаголовком «Функциональный стиль и его алгебра программ». Статья вызвала интерес к исследованиям в области функционального программирования. [4] в конечном итоге это привело к созданию современных функциональных языков, которые в значительной степени основаны на парадигме лямбда-исчисления , а не на парадигме функционального уровня, на которую надеялся Бэкус. В своей статье о премии Тьюринга Бэкус описал, чем отличается стиль ФП:

Система ФП основана на использовании фиксированного набора комбинирующих форм, называемых функциональными формами. Это, а также простые определения, являются единственными средствами создания новых функций из существующих; они не используют никаких переменных или правил подстановок и становятся операциями связанной алгебры программ. Все функции системы ФП относятся к одному типу: они отображают объекты на объекты и всегда принимают один аргумент. [2]

Сам по себе FP никогда не находил особого применения за пределами академических кругов. [5] В 1980-х годах Бэкус создал язык-преемник FL в рамках внутреннего проекта IBM Research.

Значения , которые программы FP отображают друг в друга, составляют набор , замкнутый при формировании последовательности :

if x1,...,xn are values, then the sequencex1,...,xn〉 is also a value

Эти значения могут быть построены из любого набора атомов: логических, целых, действительных, символов и т. д.:

boolean   : {T, F}
integer   : {0,1,2,...,∞}
character : {'a','b','c',...}
symbol    : {x,y,...}

неопределенное значение или дно . Последовательности сохраняют нижнюю часть :

x1,...,,...,xn〉  =  

Программы FP — это функции f , каждая из которых отображает одно значение x в другое:

f:x represents the value that results from applying the function f 
    to the value x

Функции либо являются примитивными (т. е. предоставляются средой FP), либо строятся из примитивов с помощью операций формирования программ (также называемых функционалами ).

Примером примитивной функции является константа , которая преобразует значение x в функцию с постоянным значением . Функции строгие :

f: = 

Другим примером примитивной функции является семейство функций селектора , обозначаемое 1 , 2 ,... где:

i:〈x1,...,xn〉  =  xi  if  1 ≤ i ≤ n
              =  ⊥   otherwise

Функционалы

[ редактировать ]

В отличие от примитивных функций, функционалы оперируют другими функциями. Например, некоторые функции имеют единичное значение, например 0 для сложения и 1 для умножения . Функциональный блок выдает такое значение при применении к функции f, которая имеет такое значение:

unit +   =  0
unit ×   =  1
unit foo =  ⊥

Вот основные функции FP:

composition  fg        where    fg:x = f:(g:x)
construction [f1,...,fn] where   [f1,...,fn]:x =  〈f1:x,...,fn:x
condition (hf;g)    where   (hf;g):x   =  f:x   if   h:x  =  T
                                             =  g:x   if   h:x  =  F
                                             =      otherwise
apply-to-all  αf       where   αf:〈x1,...,xn〉  = 〈f:x1,...,f:xn
insert-right  /f       where   /f:〈x〉             =  x
                       and     /f:〈x1,x2,...,xn〉  =  f:〈x1,/f:〈x2,...,xn〉〉
                       and     /f:〈 〉             =  unit f
insert-left  \f       where   \f:〈x〉             =  x
                      and     \f:〈x1,x2,...,xn〉  =  f:〈\f:〈x1,...,xn-1〉,xn〉
                      and     \f:〈 〉             =  unit f

Эквациональные функции

[ редактировать ]

Помимо того, что функция может быть построена из примитивов с помощью функционалов, она может быть определена рекурсивно с помощью уравнения, простейшим из которых является:

fEf

где E f выражение, построенное из примитивов, других определенных функций и самого функционального символа f с использованием функционалов.

FP84 — это расширение FP, включающее бесконечные последовательности , определяемые программистом формы объединения (аналогичные тем, которые сам Бэкус добавил в FL , его преемника FP) и ленивые вычисления . В отличие от FFP, еще одного из собственных вариантов FP Бэкуса, FP84 проводит четкое различие между объектами и функциями: т.е. последние больше не представляются последовательностями первых. Расширения FP84 достигаются путем удаления ограничения FP, согласно которому построение последовательности применяется только к объектам, отличным от -⊥: в FP84 вся вселенная выражений (включая те, значение которых равно ⊥) закрыта при построении последовательности.

Семантика FP84 воплощена в базовой алгебре программ, наборе равенств функционального уровня , которые можно использовать для манипулирования программами и рассуждений о них.

  1. ^ Концепция, эволюция и применение языков функционального программирования. Архивировано 11 марта 2016 г. в Wayback Machine Пол Худак, 1989 г.
  2. ^ Перейти обратно: а б с Бэкус, Дж. (1978). «Можно ли программирование освободить от стиля фон Неймана?: Функциональный стиль и его алгебра программ» . Коммуникации АКМ . 21 (8): 613. дои : 10.1145/359576.359579 .
  3. ^ «Премия А. М. Тьюринга Ассоциации вычислительной техники» (PDF) . [ постоянная мертвая ссылка ]
  4. ^ Ян, Жан (2017). «Интервью с Саймоном Пейтоном-Джонсом» . Люди языков программирования .
  5. ^ Хейг, Джеймс (28 декабря 2007 г.). «Археология функционального программирования» . Программирование в XXI веке .
  • Жертвовать простотой ради удобства: где провести черту? , Джон Х. Уильямс и Эдвард Л. Виммерс, Исследовательский центр IBM в Альмадене, Материалы пятнадцатого ежегодного симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования, Сан-Диего, Калифорния, январь 1988 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fee502a226f562ce085f28395ffcfd27__1712555520
URL1:https://arc.ask3.ru/arc/aa/fe/27/fee502a226f562ce085f28395ffcfd27.html
Заголовок, (Title) документа по адресу, URL1:
FP (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)