Encontré una buena article, alrededor de call with current continuation
patrones. Según tengo entendido, usan Scheme y undelimited continuations
. ¿Pueden implementarse los patrones del artículo en Scala? ¿Hay algún artículo sobre los patrones delimited continuations
en Scala?patrones "call-cc" en Scala?
14
A
Respuesta
13
Sí, absolutamente pueden. callCC
es la siguiente con Scala:
def callCC[R, A, B](f: (A => Cont[R, B]) => Cont[R, A]): Cont[R, A] =
Cont(k => f(a => Cont(_ => k(a))) run k)
Dónde Cont
es una estructura de datos que captura una continuación:
case class Cont[R, A](run: (A => R) => R) {
def flatMap[B](f: A => Cont[R, B]): Cont[R, B] =
Cont(k => run(a => f(a) run k))
def map[B](f: A => B): Cont[R, B] =
Cont(k => run(a => k(f(a))))
}
Así es como usted puede utilizarlo para simular excepciones comprobadas:
def divExcpt[R](x: Int, y: Int, h: String => Cont[R, Int]): Cont[R, Int] =
callCC[R, Int, String](ok => for {
err <- callCC[R, String, Unit](notOK => for {
_ <- if (y == 0) notOK("Denominator 0") else Cont[R, Unit](_(()))
r <- ok(x/y)
} yield r)
r <- h(err)
} yield r)
Llamaría a esta función de la siguiente manera:
scala> divExcpt(10, 2, error) run println
5
scala> divExcpt(10, 0, error) run println
java.lang.RuntimeException: Denominator 0
3
Scala tiene una implementación de continuaciones delimitadas mecanografiadas que solía enviarse con el compilador y la biblioteca estándar, pero se ha extraído a external module y casi se deja pudrir desde entonces. Es una gran lástima, y animo a todos los que estén interesados en continuaciones delimitadas a demostrar que se preocupan por su existencia al usar y contribuir a ella.
Cuestiones relacionadas
- 1. Patrones de diseño y Scala
- 2. Scala: ¿coincidencia de patrones con enunciados condicionales?
- 3. ¿Cómo hacer coincidir patrones con una clase anidada en Scala?
- 4. ¿Qué mejoró Scala con la coincidencia de patrones en 2.10?
- 5. ¿Cómo se combinan los patrones con múltiples valores en Scala?
- 6. Catálogo de Scala de patrones de diseño funcional
- 7. ¿Los patrones de scala son de primera clase?
- 8. ¿Qué es el equilibrador de patrones virtuales experimentales de Scala?
- 9. ¿Cómo se implementa la coincidencia de patrones en Scala en el nivel de bytecode?
- 10. ¿Existe alguna manera más clara de emparejar patrones en las funciones anónimas de Scala?
- 11. Qué patrones/soluciones comunes se han establecido en Scala para problemas encontrados con frecuencia
- 12. Scala - la designación de un elemento coincidente en la coincidencia de patrones
- 13. args coincidencia de patrones y dar mensajes de error en un script ligero Scala
- 14. En Scala, ¿por qué NaN no se recoge mediante la coincidencia de patrones?
- 15. Buscando ejemplos de cómo usar "@ _ *" al hacer la coincidencia de patrones en Scala
- 16. clases de casos, la coincidencia de patrones y constructores al curry en Scala
- 17. ¿Por qué la coincidencia de patrones en Scala no funciona con variables?
- 18. Scala AST en Scala
- 19. Coincidencia de patrones y flujos infinitos
- 20. Concordancia de patrones en CoffeeScript
- 21. Lógica 'o' en patrones Lua?
- 22. Patrones visuales en la memoria?
- 23. ¿La coincidencia de patrones de Scala viola el principio abierto/cerrado?
- 24. El compilador de Scala no puede inferir el tipo de mezcla para la coincidencia de patrones
- 25. ¿Se requiere un identificador estable durante la coincidencia de patrones? (Scala)
- 26. ¿Cómo se combinan los patrones de las grandes clases de casos de Scala?
- 27. Coincidencia de patrones vs if-else
- 28. ¿Cómo comparo dos matrices en scala?
- 29. ¿Olvidó su contraseña? ¿Patrones o técnicas? ¿Nombres de patrones?
- 30. Patrones de diseño para la comprobación de tipo estático