You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Guile Scheme:用shift和reset实现call/cc式提前退出

用shift/reset实现等价于call/cc的提前退出功能

首先要注意,Guile中使用shift和reset需要先加载对应的模块:

(use-modules (ice-9 control))

以下是和你提供的call/cc代码完全等价的shift/reset实现:

(define (my-early-exit)
  (reset
    (let ((my-val (shift k
                    (display "this will be executed")
                    (display "\n")
                    (k 5)  ;; 提前退出,将5传入捕获到的续延
                    (display "this will not be executed"))))
      (display my-val))))

逻辑对应说明:

  • reset 用来划定定界续延的边界,它包裹了从let表达式到display my-val的全部逻辑,这部分就是shift能捕获到的续延范围。
  • shift k 会把当前reset范围内的续延(也就是“将my-val绑定后执行(display my-val)”这部分逻辑)捕获并绑定到参数k上。
  • 调用(k 5)时,就会直接执行捕获到的续延逻辑(显示5),完全跳过shift后续的display语句,和原call/cc代码的提前退出行为完全一致。

内容的提问来源于stack exchange,提问作者user1632812

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:45:35