Python相当于call/cc?

昨天,我正在闯入一点,试图弄清楚如何
在Python中实施CALL/CC的语义.具体来说,我想
将此方案代码转换为等效python:
####
(定义#F)
(定义(测试)
(LET((i 0))
(call/cc(lambda(k)(set!tecontinuation k))))))
(set!i(+ i 1))
一世))
(测试)
(延续)
(延续)
####
顺便说一下,最后三行评估为1、2和3,
分别.
我能想到的最好的python翻译就是这样
(针对Python 2.5):
####
进口检查
thecontination =无
def call_cc(f):
f(esspect.currentframe().f_back)
DEF INDOKE(C):
exec c.f_code in c.f_globals,c.f_locals
def test():
i = 0
call_cc(lambda k:globals().更新({'thecontination':k}))
i = i + 1
打印i
测试()
调用(接触)
调用(接触)
####
现在,此代码在许多层面上是错误的[我确实知道
兰巴达(Lambda)有多丑陋...],但特别是我
连续 /堆栈框架似乎在右边没有恢复
观点.我希望调用(启动)可以重新启动
立即关注call_cc,但事实并非如此.毫不奇怪,
输出也是错误的. (我得到1、1和1,而不是1、2和3)
谁能帮助我,也许指出我犯了一些愚蠢的错误?
失败,有人可以向我展示呼叫/CC的工作实施
(最好基于某种形式的堆栈检查)?
谢谢!
- -
code.py:关于生活,宇宙和python http://pythonista.wordpress.com的博客
**发表于http://www.teranews.com **

# 回答1


毕达斯塔写道:
虽然我绝对不知道您在这里显示的是Python中的发电机.
def thecontination():
n = 0
而1:
n += 1
产量n
Indoke = thecontination()
打印
打印Invoke.next()
打印Invoke.next()
打印Invoke.next()
也许这就是您要寻找的?
-larry
# 回答2


在文章
pythonista Python依靠突变来做到这一点:
班级持有人:通过
def call():
x = holder()
X.Counter = 0
def cc():
X.Counter += 1
返回X.Counter
返回CC
foo = call()
打印foo()
打印foo()
打印foo()
- -
aahz(aaxpythoncraft.com)<*http://www.pythoncraft.com/
"只要我们喜欢相同的操作系统,情况就很酷了." -piranha

标签: python

添加新评论