通过 Fibbonacci 理解 CPS;通过 CPS 理解 Fibbonacci

        见《函数式编程的魅力:CPS》文中图一、图二代码。


通过 Fibbonacci 理解 CPS:

        CPS 的基本形式是这样的,对于 FuncCps ( elem cont ) 方法,在 FuncCps 内部实现 cont ( f ( elem ) ),更确切地说,是在 FuncCps 内部实现 SomeFunc ( cont ( f ( elem ) ) ),这个 SomeFunc 便是 FuncCps 内部处理 cont ( f ( elem ) ) 的方式。

通过 CPS 理解 Fibbonacci:

       将图中的代码动手展开(此处略),可以发现,当 a 为 1 或 2 时,向 SomeFunc ( cont ( elem ) ) 中代入 1,实际也就是若干个 1 的加和,通过 Lambda 式全面展示了 Fibbonacci 算数的本质。局部而言,CPS 方法使 Fibbonacci  分为两支,先算一支通到底,让另一支存入 Lambda 算式。整体而言,Fibbonacci 展开的是一棵算式树,CPS 算法是前序遍历的。有意思的也便是在迭代过程中 cont 的变化,也就是这支保存另一支的 Lambda 算式的变化。这种变化的感觉,很像九连环的玩儿法。比如前序遍历到最左叶时,代入 FibbonacciCont 的 a 和 cont 如下:

a: 2
cont: fun x->F(3)(fun y–>F(5)(fun y'->F(7)(fun y''->F(9)(fun y'''->x+y+y'+y''+y'''))))

        像不像九连环?


        所属类别:F#.net数学和算法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值