请问用,call/cc怎么控制循环的跳转啊。谢谢!
scheme吧
全部回复
仅看楼主
level 1
各位好,利用scheme遍了个控制别的软件的脚本程序,但是在用call/cc控制程序跳转时,出了问题,不知道这样编写对不,还请大侠指点。
本程序在没有添加第二个循环程序时,第一个循环可以正常运行;添加第二个循环后,程序只能运行到该循环的命令语句之前。
本程序的主要功能是:利用scheme语言作为脚本程序,控制别的软件运行,并根据获得压力值的大小来控制第二个循环实现不同的功能。
再次感谢 您的指导!
(define (pp)
(do ((cycle 1 (+ cycle 1))) ((> cycle 8)) ;第一个循环
(begin
(rpsetvar ' cycle cycle)
***********;命令语句
*********
(call/cc ;控制第二个循环的跳转
(lambda (return)
(do ((cyc 1 (+ cyc 1))) ((> cyc 10000)) ;第二个循环
(begin
(set! pressure (%rpgetvar 'pressure)) ;从外部软件获得压力值
(cond ((< pressure 4000) ;如果压力低于4000,则跳出第二个循环,继续执行第一个循环的命令。
(return))
((>= pressure 100000) ;如果压力值大于100000,则
****** )
((and (< pressure 100000) (>= pressure 50000)) ;如果压力值在50000-100000,则
******* )
((and (< pressure 50000) (>= pressure 30000)) ;如果压力值在3000-50000,则
****** )
(else ;除此之外,则
*****)
)
))))
**********;命令语句
*********
))
2015年06月08日 03点06分 1
level 12
感觉你的代码没啥问题,以下为问题简化后的形式:
输出结果如下:
2015年06月10日 13点06分 2
谢谢,也可能我那个版本的不太支持这个编译器,我后来用的递归方法解决了这个问题。
2015年06月15日 00点06分
level 12
另外提一下,这种用法如果有 call/ec 的话优先使用,效率高一些
2015年06月10日 13点06分 3
1