在函数式编程中,优化任何“循环”代码以实现尾递归通常非常重要。然而,尾递归算法通常分为两个函数 - 一个设置基本情况,另一个实现实际的循环。一个好的(虽然学术性质的)例子是反转函数。
reverse :: [a] -> [a]
reverse = reverse_helper []
reverse_helper :: [a] -> [a] -> [a]
reverse_helper result [] = result
reverse_helper result (x:xs) = reverse_helper (x:result) xs
"reverse_helper"并不是一个好的、描述性的名称。然而,"reverse_recursive_part"只是笨拙的。
你会为这样的辅助函数使用什么命名惯例?
yourfunctionsname_aux
。至于带撇号的名称,我个人非常非常不喜欢它们。我们命名事物是为了区分它们,而longfunctionname'
与其非带撇号的对应项相比,可以说是没有什么区别。 - Will Ness