原始递归函数

时间:2015-11-11 08:02:14

标签: haskell recursion functional-programming fold

在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)
æ ¹æ®{{​​3}},

ä¸æ˜¯åŽŸå§‹é€’å½’ 如果我们å…许h y'å’Œh y,则h (x:xs) = g x (h xs)的值ä»ç„¶åŸºäºŽy = xs中的y' = x:xs。

1 个答案:

答案 0 :(得分:2)

原始递归方案是{em>å‚数选择f,g

h y [] = f y
h y (x:xs) = g y x xs (h y xs)

也就是说,我们å¯ä»¥éšæ„选择f,g,h将通过原始递归æ¥å®šä¹‰ã€‚

特别是,我们å¯ä»¥é€‰æ‹©

f = \y -> v
g = \y x xs -> g' x z

其中g'是我们选择的任何其他功能。然åŽæˆ‘们得到

h y [] = v
h y (x:xs) = g' x (h y xs)

现在,如果我们让

h' xs = h () xs

我们将yå‚æ•°ä¿®å¤ä¸ºéžé‡è¦å€¼ï¼Œä»¥ä¾¿æ¢å¤é—®é¢˜ä¸­çš„函数。å°å¿ƒç¿¼ç¿¼åœ°ï¼Œh'ä¸æ˜¯ä½œä¸ºä¸€èˆ¬å½¢å¼çš„实例直接获得的,因此h'在技术上ä¸æ˜¯é€šè¿‡ä¸Šé¢çœ‹åˆ°çš„原始递归方案定义的(å³ï¼Œå®ƒä¸æ˜¯é‚£ä¸ªçš„实例)。有时,我们å‘现有许多å˜é‡y,而ä¸æ˜¯y1 .. yn,我们å¯ä»¥é€‰æ‹©n=0并在此情况下删除y。