Koka 中处理程序控制堆栈帧是如何相对放置的?

问题描述

在这里一个以下 Koka 片段,我希望有人解释调用处理程序时堆栈帧会发生什么。我试图通过打印值和全局计数器来使处理程序堆栈帧也可见,并且我在表达式时进行了脱糖。

effect foo<a> { control foo() : a }

fun main() {
  var c:int := 0
  val r = (handler {
      return(x:int) { println("in RET ctrl: " ++ x.show); x*2 }
      control foo() { 
        c := c + 1
        val this_c:int = c
        println("in FOO ctrl_1. c is: " ++ c.show)
        val r1 = resume(3)
        println("in FOO ctrl_2,r1: " ++ r1.show ++ " this_c is: " ++ this_c.show)
        r1*3
      }
  })(fn(){ 
    println("throw first foo")
    val first:int = foo()
    println("throw second foo,first: " ++ first.show)
    val snd:int = foo()
    println("got second: " ++ snd.show ++ " RET SUM: " ++ (first + snd).show)
    (first + snd)
  })
  println(r)
}

结果如下:

throw first foo
in FOO ctrl_1. c is: 1
throw second foo,first: 3
in FOO ctrl_1. c is: 2
got second: 3 RET SUM: 6
in RET ctrl: 6
in FOO ctrl_2,r1: 12 this_c is: 2
in FOO ctrl_2,r1: 36 this_c is: 1
108

两个“FOO_CTRL”处理程序框架现在如何位于原始 FN() 调用和 RET 处理程序之下?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)