Scala: объяснения с разделителями - нет - PullRequest
3 голосов
/ 13 января 2012

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

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 ]

2 голосов
/ 13 января 2012

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

1 голос
/ 13 января 2012

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

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

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

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

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
...