Не понимайте ввод разграниченных продолжений Scala (@cpsParam [B, C])

Я изо всех сил пытаюсь понять то, что точно делает это означает, когда значение имеет тип A @cpsParam[B,C] и какие типы этой формы должны, я присваиваю своим значениям при использовании разграниченного средства продолжений.

Я посмотрел на некоторые источники:

http://lamp.epfl.ch/~rompf/continuations-icfp09.pdf

http://www.scala-lang.org/node/2096

http://dcsobral.blogspot.com/2009/07/delimited-continuations-explained-in.html

http://blog.richdougherty.com/2009/02/delimited-continuations-in-scala_24.html

но они не дали мне много интуиции в это. В последней ссылке автор пытается дать явное объяснение, но это не достаточно ясно так или иначе.

Здесь представляет вывод вычисления, которое является также входом к его продолжению. B представляет тип возврата того продолжения, и C представляет свой "заключительный" тип возврата — потому что сдвиг может сделать последующую обработку к возвращенному значению и изменить его тип.

Я не понимаю различия между "выводом вычисления", "возвращают тип продолжения" и "заключительный тип возврата продолжения". Они походят на синонимы.

22
задан 4 revs, 3 users 65% 19 January 2012 в 11:49
поделиться

1 ответ

Итак, люди помогли мне с этим. в другом месте. Вот ответ:

reset ({
    ...
    ...shift((k:A=>B) => ...::C)::A...
    ...
}::B)::C

Итак, shift - это дыра типа A в вычислении {...} типа B . Аргумент shift возвращает значение типа C , поэтому reset ({...}) имеет тип C .

Ключевой трюк в понимании этого материала заключался в том, чтобы увидеть, что {...} и reset {...} имеют разный тип в зависимости от того, какой тип сдвига Аргумент возвращается.

Например:

reset ({
    "number "+shift((k:Int=>String) => List(k(1), k(2), k(3)))
})

возвращает Список («номер 1», «номер 2», «номер 3») .

Здесь A - Int , B - String , C - List [String] ] , потому что {"число" + _} является (здесь) функцией от Int до String и аргументом shift ] с учетом этой функции создает список List [String] , который становится результатом сброса ({...}) .

20
ответ дан 29 November 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: