Вопрос

Заинтересован в концепции продолжения, я начал читать вики, посты и пришел к этому «простому» примеру:

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

Без знаний о Scala я полностью потерян здесь, не мог понять, как выходит 8.

Ниже я пытался выяснить значение, но не удалось. Любой парень, не могли бы вы дать мне короткое объяснение? Да, есть книги по грамматике Scala, но они слишком толстые, я больше заинтересован в понимании концепции продолжения разграниченного продолжения, чем на языке Master 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 }

    Еще все больше и больше потеряно ...

Это было полезно?

Решение

Я нашел выступление Криса Лиги: «Monadologie: профессиональная помощь для тревоги типа» (http://vimeo.com/13304075) содержит один из лучших примеров ограниченного продолжения.

Другие советы

Fotnelton, большое спасибо! Ответ Алекса Нета в ссылке помог мне. Теперь я думаю, что получил это. Позвольте мне ответить на мой собственный вопрос, чтобы утомить вниз как записку.

Грамматика сброса и сдвига:

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

Это на самом деле означает, что в псевдо -коде C# Style:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top