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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая страница: «Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений Для комп…»)
 
Нет описания правки
Строка 1: Строка 1:
===Алгоритм Хиндли-Милнера===
Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений
Алгоритм Хиндли-Милнера предназначен для вывода типов при наличии ограничений


Строка 5: Строка 7:
Алгоритм Хиндли-Милнера описан в Пирсе, с.343
Алгоритм Хиндли-Милнера описан в Пирсе, с.343
Его суть состоит в следующем.  
Его суть состоит в следующем.  
Имеется множество ограничений на типы, записываемое в виде равенств вида:
Имеется множество ограничений на типы C, записываемое в виде равенств вида:


  [X = integer, Y = X->X]  
  [X = integer, Y = X→X]  


или  
или  


  [X->Y = Y->Z, Z = U->W]  
  [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}] называется типовая подстановка σ, которая ка