Что представляет собой сгиб для типов, отличных от списка?



рассмотрим односвязный список. Это выглядит примерно так



data List x = Node x (List x) | End


естественно определить функцию складывания, такую как



reduce :: (x -> y -> y) -> y -> List x -> y


в смысле reduce f x0 заменяет каждый Node С f и все End С x0. Это то, что прелюдия называется раза.



теперь рассмотрим простое двоичное дерево:



data Tree x = Leaf x | Branch (Tree x) (Tree x)


аналогично естественно определить такую функцию как



reduce :: (y -> y -> y) -> (x -> y) -> Tree x -> y


обратите внимание, что этой сокращение имеет совершенно другой характер; в то время как список на основе одного по своей сути последовательный, этот новый дерево на основе одного имеет больше разделять и завоевывать чувство к нему. Вы даже можете себе представить, бросив несколько par комбинаторы там. (Где бы вы поместили такую вещь в версию списка?)



мой вопрос: эта функция все еще классифицируется как "складка", или это что-то еще? (И если да, то что это?)



в основном, когда кто-то говорит о складывании, они всегда говорят о складывании списки, который по своей сути является последовательной. Мне интересно, является ли" последовательный " частью определения того, что такое складка, или это просто случайное свойство наиболее часто используемого примера складывания.

619   0  

Comments

    Ничего не найдено.