В языке программирования теория типов полиморфизм строк является разновидностью полиморфизм, который позволяет писать программы, полиморфные по типам полей записи (также известные как строки, отсюда и полиморфизм строк). Строчная полиморфная система типов и доказательство вывода типов были введены Митчеллом Уандом.
Записи и типы записей
Значение записи записывается как , где запись содержит поля (столбцы), - поля записи, а - значения полей. Например, запись, содержащая трехмерную декартовую точку, может быть записана как .
Тип записи с полиморфной строкой записывается как , где возможно или . Запись имеет строковый полиморфный тип записи всякий раз, когда поле записи имеет тип (для ) и не имеет полей (для ). Строчная полиморфная переменная выражает тот факт, что запись может содержать поля, отличные от .
Полиморфные по строкам типы записей позволяют нам писать программы, которые работают только с разделом записи. Например, - это функция, выполняющая какое-то двумерное преобразование. Из-за полиморфизма строки функция может выполнять двумерное преобразование в трехмерной (фактически, n-мерной) точке, оставляя координату z неизменной. Более того, функция может выполняться с любой записью, содержащей поля и с типом . Обратите внимание, что не было потери информации: тип гарантирует, что все поля, представленные переменной , присутствуют в возвращаемом типе.
Полиморфизмы строк могут быть ограничены. Тип выражает тот факт, что запись этого типа имеет точно поля и и ничего больше. Таким образом, получается классический тип записи.
Операции ввода с записями
Операции с записями выбора поля , добавление поля, и удаление Поле может иметь строковый полиморфный тип.
Примечания
- ^Wand, Mitchell (июнь 1989 г.). «Вывод типа для объединения записей и множественного наследования». Ход работы. Четвертый ежегодный симпозиум по логике в компьютерных науках. С. 92–97. doi : 10.1109 / LICS.1989.39162.
- ^Палочка, Митчелл (1991). «Вывод типа для объединения записей и множественного наследования». Информация и вычисления. 93 (Выборки из симпозиума IEEE 1989 г. по логике в компьютерных науках): 1–15. DOI : 10.1016 / 0890-5401 (91) 90050-C. ISSN 0890-5401.