Что представляет собой сгиб для типов, отличных от списка?
рассмотрим односвязный список. Это выглядит примерно так
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 комбинаторы там. (Где бы вы поместили такую вещь в версию списка?)
мой вопрос: эта функция все еще классифицируется как "складка", или это что-то еще? (И если да, то что это?)
в основном, когда кто-то говорит о складывании, они всегда говорят о складывании списки, который по своей сути является последовательной. Мне интересно, является ли" последовательный " частью определения того, что такое складка, или это просто случайное свойство наиболее часто используемого примера складывания.
Comments