Параморфизм

В формальных методах компьютерной науки параморфизм (от греч. παρά , что означает «близко друг к другу») является расширением концепции катаморфизма, впервые введенной Ламбертом Меертенсом [1] для работы с формой, которая «съедает свой аргумент и сохраняет его» [2] [3] , как показано на примере факториальной функции. Его категориальным дуалом является апоморфизм .

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

Пример реализации Haskell для списков:

cata :: ( a -> b -> b ) -> b -> [ a ] ​​-> b para :: ( a -> ([ a ], b ) -> b ) -> b -> [ a ] ​​-> b ana :: ( b -> ( a , b )) -> b -> [ a ] ​​apo :: ( b -> ( a , Либо [ a ] ​​b )) -> b -> [ a ]                                             ката ф б ( а : ас ) = фа ( ката ф б ас ) ката _ б [ ] = б               пункт ж б ( а : как ) знак равно ж а ( как , пункт ж б как ) пункт _ б [] = б                ana u b = случай u b из ( a , b' ) -> a : ana u b'               apo u b = случай u b из ( a , справа b' ) -> a : apo u b' ( a , слева как ) -> a : как                       

Смотрите также

Ссылки

  1. ^ "Параморфизмы" (PDF) . 1990. стр. 44. CiteSeerX  10.1.1.19.4825 .
  2. ^ Филип Вадлер . Взгляды: Способ сопоставления шаблонов с абстракцией данных. Технический отчет 34, Группа методологии программирования, Гетеборгский университет и Технологический университет Чалмерса, март 1987 г.
  3. ^ Мейер, Эрик ; Фоккинга, Мартен; Патерсон, Росс (1991). «Функциональное программирование с помощью бананов, линз, конвертов и колючей проволоки». CiteSeerX 10.1.1.41.125 .  {{cite web}}: Отсутствует или пусто |url=( помощь )
  • Объяснение на StackOverflow: [1], [2], [3]
  • Блоги: [4]
  • Переговоры: [5]
  • Пакет схем рекурсии Haskell


Взято с "https://en.wikipedia.org/w/index.php?title=Параморфизм&oldid=1249728862"