Was sind paramorphisms?

Lesen durch dieses klassische Papier, ich bin stuck on paramorphisms. Leider ist der Abschnitt sehr Dünn, und die Wikipedia-Seite sagt nichts.

Mein Haskell übersetzung:

para :: (a -> [a] -> b -> b) -> b -> [a] -> b
para f base = h
  where
    h []       =   base
    h (x:xs)   =   f x xs (h xs)

Aber ich habe nicht Begriffen, dass Sie -- ich habe kein Gespür für die Art Unterschrift oder das gewünschte Ergebnis.

Was ist ein paramorphism, und was sind einige nützliche Beispiele in Aktion?


Ja, ich habe gesehen,diese Fragen, aber Sie decken nicht paramorphisms direkt und ausschließlich Punkt-zu -Ressourcen, die hilfreich sein könnten als Hinweise, aber nicht als Lernmaterial.

  • para f base xs = foldr (uncurry f) base $ zip xs (tail $tails xs), dünkt mich.
  • Nach diese wiki-Seite, paramorphisms "Modell primitive Rekursion über induktive Datentypen". Bedeutet das, dass nichts/helfen?
  • Jeremy Gibbons die "Kernspaltung" Papier, das ich wies in einem Kommentar zu einer der Fragen ist sehr nützlich learning-material. cs.ox.ac.uk/jeremy.gibbons/Publikationen/Spaltung.pdf Es funktioniert durch zahlreiche Rekursion Muster sehr deutlich.
  • Daniel ' s re-write kann vereinfacht werden, da para f base xs = foldr g base (init $ tails xs) where g (x:xs) = f x xs. Das erinnert an Common Lisp ist maplist.
InformationsquelleAutor Matt Fenwick | 2012-11-09
Schreibe einen Kommentar