Pregunta

Los módulos Edison API y Core son la implementación de Haskell de Datos puramente funcionales Estructuras

¿Las estructuras de datos nativos F # y .Net cubren los casos de uso en la API de Edison y Core?

¿Sería beneficioso intentar portar los módulos de API y CORE Haskell a F #?

¿Fue útil?

Solución

No he leído el documento en edison , pero si no es nada más que la implementación de Haskell de estructuras de datos puramente funcionales, ¿no tiene más sentido portar el código SML que está en el libro / tesis? Debería ser más fácil que portar el código Haskell, que debe ser anotado para el rigor, mientras que F # tendrá que ser anotado para la pereza.

El lenguaje utilizado por el libro es SML con extensiones de sintaxis para una evaluación perezosa. F # proporciona la mitad de esas extensiones de forma nativa:

> let x = lazy 12;;
val x : Lazy<int> = <unevaluated>
> match x with
  | Lazy(n) -> n;;
val it : int = 12
> x;;
val it : Lazy<int> = 12

Para convertir la notación divertida perezosa del libro, cambia esto:

fun lazy plus ($m, $n) = $m + n

A esto:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())

(Ver página 33 en el libro). Las diferencias entre SML y F # son sintaxis menor, por lo que la traducción debería ser fácil.

En cuanto a si vale la pena, la mayoría de las estructuras de datos en el libro de Okasaki son muy especializadas, por lo que es poco probable que ya existan en .NET, incluso como el Conjunto y Mapa inmutables de F #. Valdría la pena para las personas que necesitan esas estructuras de datos.

Otros consejos

Revisando esta pregunta meses después, observo que

http://lepensemoi.free.fr/index. php / tag / estructuras de datos puramente funcionales

alguien ha implementado muchos de ellos en ese blog.

No seguí el enlace, aunque tengo al menos un poco de familiaridad con el trabajo o con Okasaki. Así que toda esta respuesta es tremendamente especulativa (es posible que no tenga una base en mis suposiciones acerca de lo que está en la API de Edison).

Espero que haya "algún beneficio" en el sentido de que a las personas les gustan las "implementaciones de referencia de estructuras de datos de PF comunes" en "nuevos idiomas" para ayudar a aprender nuevos idiomas.

En cuanto al uso en la práctica (en lugar de la pedagogía), espero que algunos de ellos sean útiles, aunque hay algunas API de F # y .Net que pueden ser tan útiles o más útiles para muchos escenarios. Los principales 'lotes' de funcionalidades superpuestas supongo que son las colecciones inmutables de F # (Set y Map), así como la .Net 4.0 colecciones concurrentes (como ConcurrentQueue).

Por supuesto, también encontrará algunos fragmentos de código en la web, como cola inmutable .

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