3

継続の概念に興味を持って、私は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 }

    さらにますます失われます...

4

2 に答える 2

2

クリスリーグの講演「Monadologie:タイプ不安に対する専門家の助け」(http://vimeo.com/13304075)には、区切られた継続のより良い例の1つが含まれていることがわかりました。

于 2012-01-13T15:18:42.977 に答える
1

fotNelton, thanks a lot! Alex Neth's answer in the link helped me out. Now I think I got it. Let me answer my own question to dot down as a note.

Grammar of reset and shift:

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

It actually means, in C# style pseudo code:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
于 2012-01-13T10:59:14.713 に答える