Вывод типов при вызове обобщенных методов с лямбдами и перегрузкой функций: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) (Новая страница: «Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений Для комп…») |
Mikst (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
===Алгоритм Хиндли-Милнера=== | |||
Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений | Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений | ||
Строка 5: | Строка 7: | ||
Алгоритм Хиндли-Милнера описан в Пирсе, с.343 | Алгоритм Хиндли-Милнера описан в Пирсе, с.343 | ||
Его суть состоит в следующем. | Его суть состоит в следующем. | ||
Имеется множество ограничений на типы, записываемое в виде равенств вида: | Имеется множество ограничений на типы C, записываемое в виде равенств вида: | ||
[X = integer, Y = | [X = integer, Y = X→X] | ||
или | или | ||
[ | [X→Y = Y→Z, Z = U→W] | ||
Требуется найти для этого множества ограничений наиболее общий '''унификатор'''. | Требуется найти для этого множества ограничений наиболее общий '''унификатор'''. | ||
'''Унификатором''' называется типовая подстановка | '''Унификатором''' множества ограничений C[S<sub>{i}=T<sub>{i}] называется типовая подстановка σ, которая ка |
Версия от 19:01, 25 июня 2014
Алгоритм Хиндли-Милнера
Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений
Для компиляции он важен когда мы выводим типы параметров в вызове обобщенной функции, при этом в качестве параметров фигурируют ляибда-выражения.
Алгоритм Хиндли-Милнера описан в Пирсе, с.343 Его суть состоит в следующем. Имеется множество ограничений на типы C, записываемое в виде равенств вида:
[X = integer, Y = X→X]
или
[X→Y = Y→Z, Z = U→W]
Требуется найти для этого множества ограничений наиболее общий унификатор.
Унификатором множества ограничений C[S{i}=T{i}] называется типовая подстановка σ, которая ка