我试图编写一个递归函数来做某事,但在每一步我都想知道树中当前的深度/索引.那么如何在不使用函数签名中的索引参数的情况下实现这一目的呢?
就像是:
rec_fn n = do print index
do_something n
if n > 0
then rec_fn (n-1)
else print "end"
Run Code Online (Sandbox Code Playgroud)
所以我如何获得index,而不做以下事情:
rec_fn n i = do print i
do_something n
if n > 0
then rec_fn (n-1) (i+1)
else print "end"
Run Code Online (Sandbox Code Playgroud)
bzn*_*bzn 12
好吧,如果你的函数依赖于当前索引,它应该将它作为参数.否则你会破坏纯函数的许多优点,例如引用透明性.
如果它在函数调用中删除了额外的参数,你可以使用如下的辅助函数:
rec_fn n = go n 0
where go n i = do print i
do_something n
if n > 0
then go (n-1) (n+1)
else print "end"
Run Code Online (Sandbox Code Playgroud)
这是一种在Haskell中经常使用的模式.