什么是隐式递归?它与显式递归有什么不同?
答案 0 :(得分:6)
我没见过经常使用的术语。谷歌搜索在一本关于lambda演算的书中揭示了一种用法。那本书的论述如下:
如果这样的等式,如
FAC = \n. if n = 0 then 1 else n * FAC (n-1),
确实出现了,我们将其称为“隐式递归”并说它是非法的。 (我对此有点怀疑。)
我不知道为什么这个词被认为是有用的;对我而言,这只是另一个术语。重要的是区分真正的数学定义和递归方程,必须要解决。并非每个递归方程都有一个有用或有趣的解决方案;例如,虽然阶乘函数是上述FAC
的解决方案,但
x = x + 1
是“底部”,可能代表“错误”或“未定义”或“分歧”。
我认为教科书中的这一行试图区分“隐式递归”(我称之为递归方程或递归方程)和使用显式定点算子喜欢Y组合。
对于实用的编程语言,所有这些讨论都是非常学术性的。编程语言完全设置为支持“隐式递归”,尽管explicit fixed-point combinators are also surprisingly useful。
答案 1 :(得分:2)
我已经听过显式和隐式递归这些术语来对比递归函数定义(显式),例如:
sum (x:xs) = x + sum xs
sum [] = 0
使用明确递归函数的函数,如fold
和map
,(隐式),例如:
sum xs = foldr (+) 0 xs