2010-03-13 6 views
22

값이 A @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

하지만 그들은 이것으로 나에게 많은 직관을 포기하지 않았다. 마지막 링크에서 저자는 명확한 설명을하려고 시도하지만 어쨌든 충분하지 않다.

여기에서 A는 계산의 결과를 나타내며, 계산의 결과도 그 연속에 대한 입력입니다. B는 해당 연속의 반환 유형을 나타내고 C는 반환 된 값에 대한 추가 처리를 수행하고 해당 유형을 변경하기 때문에 C가 "최종"반환 유형을 나타냅니다.

I "가 계산 출력」, 「연속의 반환 타입"과 "연속 최종 리턴 형"의 차이를 이해하지 못한다. 동의어처럼 들립니다.

+2

사람들이 내 블로그 글을 보지 못하면 언제나 슬프다. http://suereth.blogspot.com/2010/03/how-you-should-think-about-delimited.html 나는 인터넷에서 기존 소스를 크게 보면서 좌절감에 빠지기 때문에 자세히 설명하십시오. – jsuereth

+0

감사합니다. Josh, 나는 귀하의 게시물을 볼 것입니다. – jkff

답변

20

그래서 사람들은 다른 곳에서 이걸 도와주었습니다.

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

그래서 shiftB 유형의 계산 {...} 입력 A의 구멍이다 : 여기 해답이다. 인수가 shift이면 C 유형의 값을 반환하므로 reset ({...})의 유형은 C입니다.

이 항목을 이해하는 데 핵심적인 요령은 shift의 인수가 반환하는 유형에 따라 {...}reset {...}이 다른 유형임을 확인하는 것이 었습니다. 예를 들어

:

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

반환 List("number 1", "number 2", "number 3").

여기 A, {"number" + _}Int에서 String에 기능 shift의 인수는 그 기능을 부여 (여기) 때문에 CList[String]이다 BString이다 Intreset({...})의 결과로되는 List[String]를 생성한다.

+0

아주 좋은 설명! – hotzen

1

나는 여기에 포함 된 정확한 타이핑 규칙/함의를 파악하는 과정에 있습니다.

예제의 유형이 위의 그림과 같이 "충분히 잘 맞는다"면 쉽고/쉬워 보이지만, 필자와 타이핑을 비교할 때 더 많은 interrest/difficult (적어도 나를 위해)가됩니다. tiark의 rompf :

|- e: [email protected][B,C]; {[|r|]}: U 
----------------------------------------------------- 
[|val x: A = e; r|] = [|e|].map((x: A) => {[|r|]}) 

그렇게 [|e|].map((x: A) => {[|r|]})의 결과는 tiark의 논문에서 지정된 맵의 정의에 따라 유형 Shift[U,B,C]이있을 것이다.

여기서 U는 반드시 B.

지금까지 U는 tiark의 논문에서지도의 정의에 주어진 U <: B 같은 것을하지 않고 B 다를 수 왜 이해가 안와 동일하지 않습니다.

나는 여기서 무엇을 잃어 버렸 는가?

팁이나 아이디어가 있으십니까?

관련 문제