问题
Interested in the concept of continuation, I started reading wikis, posts, and came to this "simple" example:
reset {
...
shift { k: (Int=>Int) => // the continuation k will be the '_ + 1' below
k(7)
} + 1
}
// result: 8
Without knowledge of Scala, I'm totally lost here, could not figure out how the 8 comes out.
Below is how I tried to figure out the meaning but failed. Any guy could you please give me a short explanation? Yeah there are Scala grammar books but they are too thick, I'm more interested in understanding delimited continuation concept than master Scala language...
(Int=>Int)
Looks like a C# delegate, input is Int, output is Int.
k: (Int=>Int) => k(7)
I'm lost here... what is k, and what is (Int=>Int)=>k(7)?
shift { k: (Int=>Int) => k(7) } + 1
Even more lost...
reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }
Even even more and more lost...
回答1:
I found Chris League's talk, "Monadologie: Professional Help for Type Anxiety" (http://vimeo.com/13304075) contains one of better examples of a delimited continuation.
回答2:
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;
来源:https://stackoverflow.com/questions/8848948/scala-delimited-continuations-explained-not