Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

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

Функциональный тип зависит от типов параметров и типа результата функции. Другими словами, это тип высшего рода, или, более точно, неприменённый конструктор типов «». В теоретических моделях и языках с поддержкой каррирования, например в просто типизированном лямбда-исчислении, функциональный тип зависит ровно от двух типов: области определения и области значений . В этом случае функциональный тип, следуя математической традиции, обычно записывают как (в практических языках программирования — A -> B), или как , подразумевая, что существует ровно теоретико-множественных функций[en], отображающих на . С точки зрения соответствия Карри — Ховарда обитаемость функционального типа эквивалентна доказуемости логической импликации .

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

Языки программирования

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

Язык программирования Нотация Пример сигнатуры типа[en]
С поддержкой первоклассных функций,
параметрического полиморфизма
C++11 std::function<ρ (α1,α2,...,αn)> function<function<int(int)>(function<int(int)>, function<int(int)>)> compose;
C# Func<α1,α2,...,αn,ρ> Func<A,C> compose(Func<A,B> f, Func<B,C> g);
Go func(α1,α2,...,αn) ρ var compose func(func(int)int, func(int)int) func(int)int
Haskell α -> ρ compose :: (a -> b) -> (b -> c) -> a -> c
Objective-C/C/C++ с блоками ρ (^)(α1,α2,...,αn) int (^compose(int (^f)(int), int (^g)(int)))(int);
OCaml α -> ρ compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
Scala (α1,α2,...,αn) => ρ def compose[A, B, C](f: B => C, g: A => B): A => C
Standard ML α -> ρ compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
Без первоклассных функций,
параметрического полиморфизма
Си ρ (*)(α1,α2,...,αn) int (*compose(int (*f)(int), int (*g)(int)))(int);

Следует обратить внимание, что в примере на C# функция compose имеет тип «Func< Func<A,B>, Func<B,C>, Func<A,C> >».

Денотационная семантика

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

Денотационная семантика занимается поиском более подходящих моделей (называемых областями[en]), в том числе, для моделирования таких понятий языков программирования как функциональный тип. В денотационной семантике считается, что целесообразно не ограничиваться лишь вычислимыми функциями, а использовать любые непрерывные по Скотту функции на частично упорядоченных множествах, которыми возможно смоделировать также и незавершимые вычисления[en] (а таковые возникают во всяком полном по Тьюрингу языке). Средства теории областей, используемые в денотационной семантике, достаточно выразительны, например, непрерывной по Скотту функцией моделируется «parallel or», определимый далеко не во всех языках программирования.

См. также

Ссылки

Эта страница в последний раз была отредактирована 25 апреля 2021 в 06:33.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).