cps/trampoline

eopl 第五、六两章谈的就是这个问题。

我写了一个 python 版本的程序,先挖个坑,然后等彻底看完再补上。

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 # the cps version
 5 def s(n, f):
 6     if n < 1:
 7         return f(n)
 8     return s(n-1,
 9              lambda x: f(x + n))
10
11 # the trampoline version
12 def t_s(n, f):
13     if n < 1:
14         return lambda :f(n)
15     return lambda : t_s(n-1, lambda x: f(x + n))
16
17 def trampoline(f):
18     while hasattr(f, ‘__call__‘):
19         f = f()
20     return f
21
22 if __name__ == ‘__main__‘:
23     print s(10, lambda x: x)
24     print trampoline(t_s(10, lambda x: x))
时间: 2024-10-10 16:50:31

cps/trampoline的相关文章

CITRIX安装成功后,通过CPS调用应用程序报错500无法连接LICENSE服务器解决方法

原因分析:安装的CPS服务器版本与FARM版本不一致导致的. 解决方法: 打开对应CPS的CITRIX客户端界面,选中当前对应SERVER,右键"所有任务"---SET SERVER EDIDTION-修改为铂金版问题解决.

递归——CPS(三)

JScript不是天然支持CPS,但是可以写一个分发引擎使得能工作在CPS风格下.一般只有一个活动的continuation,所以可以定义规则:JScript CPS 函数允许有返回,但是它们做的最后一件事必须是将continuation告诉我们的分发引擎. 为了让事情简单化,我们令每个CPS 风格的函数拥有一个参数,当然,可以是一个包含多个字段的对象. 让我们回顾一下前面的 CPS treeDepth程序,并且将所有的 continuation 调用 替换为 这样一种调用: 这种调用告诉运行时

递归——CPS(二)

给出一个计算树深度的函数: function treeDepth(curtree) { if(curtree == null) return 0; else { var leftDepth = treeDepth(curtree.left); var rightDepth = treeDepth(curtree.right); return 1 + Math.max(leftDepth, rightDepth); } } 现在要用CPS风格重写这个函数. 避免函数的返回值,而是将返回值传入con

CPS冥想 - 1 重新审视CPS

这篇文章是在阅读Eric Lippert大神的MSDN Blog文章时同步写成的,其中主要是各种翻译,同时还混杂自己阅读文章的笔记和感想. 原博文地址 http://blogs.msdn.com/b/ericlippert/archive/2010/10/21/continuation-passing-style-revisited-part-one.aspx CPS是Continuation Passing Style的缩写,关于这种风格,E.L.大神和通常的程序风格做了一个对比: 通常的程序

最好的cps广告联盟怎么选择

最好的cps广告联盟怎么选择?58传媒广告联盟工作人员根据市场调查解释说,目前市场上中小联盟过多,有些非正规的联盟往往因为经营不利而选择跑路,让站长们的心血覆水东流,甚至还有一些非正规广告联盟连自己的服务器都没有,利用虚拟主机来做联盟欺骗站长,所以对于站长们来说,要选择最好的58广告联盟,这样才能保证效果和收益,那最好的cps广告联盟怎么选择? 网络广告的投放要想获得可观推广效果,就必须要重视用户体验,而用户体验多源自于网络广告的创意.关于网络广告的广告文案.广告的文案一定要围绕广告标题来开展,

递归——CPS(一)

程序中为什么需要栈stack? 普通的程序中,接触到子程序和函数的概念,很直观地,调用子程序时,会首先停止当前做的事情,转而执行被调用的子程序,等子程序执行完成后,再捡起之前挂起的程序,这有可能会使用刚才子程序计算出的数据.但是在程序被挂起的地方重新捡起程序并继续执行需要一个机制,即,存储当前所做事情的相关信息和以后在哪里捡起这个程序(现场信息).这时,栈自然而然就是满足这种需要的一个数据结构(为什么使用栈略过不提). 如果情况发生改变,没有函数需要返回,函数要么终止程序,要么是调用另一个函数,

Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc

Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=====================常用街机系统 3 4. NEO GEO,SNK之系统 3 5. SNK新日本企划 3 6. CPS2和CPS1,,CAPCOM早期街机的机版系统 4 7. MAME系统 4 8. SFC/SMC (这个是使用 手柄的,不是 摇杆) 4 9. 游戏)三大组成部分 Arcade, C

ECE 252 / CPS 220 高级计算机体系架构 Duke University--Fall

http://people.ee.duke.edu/~sorin/ece252/lectures/ ECE 252 / CPS 220 Advanced Computer Architecture I Fall 2009 Duke University Prof. Daniel Sorin ([email protected]) based on slides developed by Profs. Roth (Penn), Hill, Wood, Sohi, Smith, Lipasti (W

cps和dsp渠道手法的研究

初创型企业或者成长型企业,是需要大量的拉新客的,但是拉新客的转化是非常低的,这个时候通过DSP可以很大的提高网站的留存率,也就是提高它的二次转化以及增加市场份额,为什么会说增加市场份额呢? Moves Like Jagger Maroon 5;Christina Aguilera - Moves Like Jagger (The Voice Performance) 因为不断的拉新客进来,就不断的有新客转化成老用户进行沉淀,老用户不断增多,新用户不断进来,形成良性的互动,就会使企业的市场份额不断