【发布时间】:2012-10-30 07:32:22
【问题描述】:
通读this classic paper,我陷入了同构问题。不幸的是,该部分很薄,维基百科页面没有说明任何内容。
我的 Haskell 翻译是:
para :: (a -> [a] -> b -> b) -> b -> [a] -> b
para f base = h
where
h [] = base
h (x:xs) = f x xs (h xs)
但我不明白——我对类型签名或期望的结果没有任何直觉。
什么是变形,有哪些有用的例子?
是的,我见过thesequestions,但它们并没有直接涉及到变形,只指向resources,这可能有助于作为参考,但不能作为学习材料。
【问题讨论】:
-
para f base xs = foldr (uncurry f) base $ zip xs (tail $tails xs),我想。 -
根据this wiki page,paramorphisms“对归纳数据类型进行模型原始递归”。这意味着什么/帮助?
-
我在对其中一个问题的评论中指出的 Jeremy Gibbons 的“Fission”论文是非常有用的学习材料。 cs.ox.ac.uk/jeremy.gibbons/publications/fission.pdf 它可以非常清晰地处理多种递归模式。
-
丹尼尔重写can be simplified as
para f base xs = foldr g base (init $ tails xs) where g (x:xs) = f x xs。这让人想起Common Lisp'smaplist。
标签: haskell recursion functional-programming higher-order-functions