Pregunta

Interesado en el concepto de continuación, comencé a leer wikis, publicaciones y llegué a este ejemplo "simple":

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

Sin el conocimiento de Scala, estoy totalmente perdido aquí, no pude entender cómo salen los 8.

A continuación se muestra cómo intenté descubrir el significado pero fallé. ¿Algún chico, podría darme una breve explicación? Sí, hay libros de gramática de Scala, pero son demasiado gruesos, estoy más interesado en comprender el concepto de continuación delimitado que el lenguaje maestro Scala ...

  • (Int=>Int)

    Parece un delegado de C#, la entrada es int, la salida es int.

  • k: (Int=>Int) => k(7)

    Estoy perdido aquí ... ¿Qué es K, y qué es (int => int) => k (7)?

  • shift { k: (Int=>Int) => k(7) } + 1

    Aún más perdido ...

  • reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }

    Incluso cada vez más perdido ...

¿Fue útil?

Solución

Encontré la charla de Chris League, "Monadologie: Ayuda profesional para la ansiedad de tipo" (http://vimeo.com/13304075) contiene uno de los mejores ejemplos de una continuación delimitada.

Otros consejos

Fotnelton, muchas gracias! La respuesta de Alex Neth en el enlace me ayudó. Ahora creo que lo tengo. Déjame responder a mi propia pregunta para que salpique como una nota.

Gramática de reinicio y cambio:

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

En realidad significa, en el código de pseudo de estilo C#:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top