这是与此How to Reverse a List?类似的问题,但是对于迭代(尾递归)函数。我该如何创建这样的功能?有可能吗?
答案 0 :(得分:2)
是;实际上 public string getvalue()
{
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("www.fuchsonline.com");
var link = doc.DocumentNode.SelectNodes("//div[@id='footertext']");
return link.ToString();
}
的标准实现完全是尾递归的。
reverse
不喜欢使用(define (reverse xs)
(fold cons '() xs))
?没问题:
fold
答案 1 :(得分:2)
甚至更明确:
(define (reverse xs)
(let loop ((pend xs)
(res '()))
(if (null? pend)
res
(loop (cdr pend) (cons (car pend) res)))))
Chris的 fold 答案更整洁,可以更好地表现(出于各种原因)。 至于问题的第二部分,它总是可能的,即每个函数都可以进行尾递归(例如,通过转换为cps,可以机械地完成)。