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