Scala:定界连续解释 - 不是

时间:2012-01-13 10:18:21

标签: scala continuations delimited-continuations

对延续概念感兴趣,我开始阅读wiki,帖子,并且来到这个“简单”的例子:

reset {
  ...
  shift { k: (Int=>Int) =>  // the continuation k will be the '_ + 1' below
    k(7)
  } + 1
}
// result: 8

在没有Scala的情况下,我完全迷失在这里,无法弄清楚8是如何出来的。

以下是我试图找出其含义但失败的方法。有人可以请你给我一个简短的解释吗?是的,有Scala语法书,但是它们太厚了,我对理解分隔的延续概念比对Scala高级语言更感兴趣...

  • (Int=>Int)

    看起来像C#委托,输入是Int,输出是Int。

  • k: (Int=>Int) => k(7)

    我迷失在这里......什么是k,什么是(Int => Int)=> k(7)?

  • shift { k: (Int=>Int) => k(7) } + 1

    更失落......

  • reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }

    甚至越来越失落......

2 个答案:

答案 0 :(得分:2)

我发现了克里斯联盟的演讲,“Monadologie:类型焦虑的专业帮助”(http://vimeo.com/13304075)包含一个更好的分隔延续的例子。

答案 1 :(得分:1)

fotNelton,非常感谢! Alex Neth在链接中的回答帮助了我。现在我想我明白了。让我回答一下我自己的问题,作为一个注释。

重置和转移的语法:

reset {
  ...
  shift { cf: (InputParameterType => OutpututParameterType) =>
     CodeBlockInsideShift
  } 
  CodeBlockAfterShiftBeforeEndOfReset
}

它实际上意味着,在C#样式伪代码中:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;