【发布时间】:2016-02-12 07:08:40
【问题描述】:
在A tutorial on universality and expressiveness of fold 第 4.1 章中,声明了这种递归模式
h y [] = f y
h y (x:xs) = g y x xs (h y xs)
是原始递归,但我不明白为什么模式
h [] = v
h (x:xs) = g x (h xs)
不是根据definition of primitive recursive的原始递归。
如果我们让y = xs 和y' = x:xs,h y' 的值仍然基于h (x:xs) = g x (h xs) 中的h y。
【问题讨论】:
-
第 4.1 章在哪里说您的第二个示例不是原始递归的?它从您的第二个示例开始,然后只是对其进行概括(通过添加额外的
y参数)以获得您的第一个版本。但我没有看到只有你的第一个使用原始递归的说法。 -
@Cactus 这种对列表的递归模式称为原始递归(Kleene,1952)。我想我误解了它的意思。谢谢!
-
是的,但这不意味着仅您的第一个示例称为原始递归,与 您的第二个示例(此外,引用您的示例会令人困惑,因为与教程相比,您颠倒了它们的顺序......)
-
@Cactus 教程说“我们将把这种递归模式推广到原始递归”。这种暗示原始模式不是原始递归。
-
另一个问题是为什么这是一个泛化形式?
标签: haskell recursion functional-programming fold