2009-09-21 12 views
9

Estoy aprendiendo Haskell y tratando de encontrar la forma más idiomática de implementar un algoritmo de línea de visión.¿Es mejor utilizar la mónada de estado o pasar el estado recursivamente?

El código de demostración que encontré usa la mónada de estado, pero me parece más simple (soy solo un principiante) pasar el estado recursivamente. ¿Que me estoy perdiendo aqui? ¿Hay problemas de rendimiento?

código de encontrar en: http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell

Gracias,

Chris.

+0

La recursión del pozo puede ser más lenta y hacer que su pila crezca –

+7

@Tnay Recursion también puede ser más rápido y se puede ejecutar en un espacio de pila constante. – Amok

+5

Vale la pena señalar que la mónada de estado y la ST ("State Thread", que usa el artículo) mónada no son lo mismo. – jrockway

Respuesta

11

Puede convertirse en un poco detallado pasar el estado en todas partes. Además, la mónada estatal es bien conocida por la mayoría de los codificadores de haskell, por lo que sabrán lo que estás haciendo. Si transfiere su propia mano, fuera de una mónada, puede ser difícil discernir qué hace su código.

Encontré la mónada de estado ordenada para encapsular los cambios de estado, es bastante obvio qué parte de su código es estable (es decir, altera o depende del estado) w.r.t. el resto de las cosas puras

+1

Aprender a utilizar las mónadas correctamente también es importante, por lo que usarlas en una situación en la que sabes cómo lograrías lo mismo puede ser una buena forma de aprender. – Amok

10

Para programas más grandes, es mejor ocultar el estado que pasa la plomería en la mónada. Entonces hay menos riesgo de error.

3

Una ventaja de utilizar una mónada para pasar el estado en lugar de pasar el estado explícitamente, es que hay muchos combinadores útiles definidos para las mónadas que puede usar.

Cuestiones relacionadas