通过共同递归,我的意思是展开一棵树,例如使用ana
Ed Kmett递归方案中的态射
通过重新组合树,我的意思是共享结构的图。例如,二项式期权定价树或帕斯卡三角形。这两者都有一些对称性,所以为了效率,我们希望避免重新计算树的一部分,而是重新使用已经计算过的分支。
注意这个问题不是关于计算上述示例中的值的一些聪明方法;这是关于递归的一般问题。
例如,对于期权定价,可以像这样生成树:
data Tree x = Leaf x | Branch x (Tree x) (Tree x)
ana \(x, depth) ->
if depth == maxDepth
then LeafF x
else BranchF x (p * x, depth + 1) ( (1.0 - p) * x, depth + 1) -- p < 1.0
因此,“向上”分支中p * x
的值为 ,“向下”分支中的值为(1-p) * x
。由于这种对称性,“up”后跟“down”节点将具有与“down”后跟“up”分支相同的值。它也是整个子树。
我认为有可能以State
某种方式传递包含已计算节点的哈希图。
或者,如果我能以某种方式访问已经计算过的子树,我可以将它作为态射中的 aLeft
传入apo
。
是否有一些现有的态射允许这样做?或者我可以自己编码吗?