Question

Les modules Edison API et Core sont l’implémentation Haskell de Données purement fonctionnelles. Structures

Les structures de données F # et .Net natives couvrent-elles suffisamment les cas d'utilisation dans l'API et le Core Edison?

Y aurait-il un avantage à essayer de porter les modules API et CORE Haskell en F #?

Était-ce utile?

La solution

Je n'ai pas lu le l'article sur Edison . , mais si ce n’est rien de plus que l’implémentation Haskell de structures de données purement fonctionnelles, n’est-il pas plus logique de porter le code SML qui est dans le livre / la thèse? Cela devrait être plus facile que de porter du code Haskell, qui doit être annoté pour des raisons de rigueur, alors que F # devra être annoté pour des raisons de paresse.

Le langage utilisé par le livre est SML avec des extensions de syntaxe pour une évaluation paresseuse. F # fournit la moitié de ces extensions en mode natif:

> 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

Pour convertir la notation fun paresseux du livre, changez ceci:

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

À ceci:

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

(Voir page 33 du livre). Les différences entre SML et F # étant une syntaxe mineure, la traduction doit être simple.

Quant à savoir si cela en vaut la peine, la plupart des structures de données du livre d’Okasaki sont très spécialisées. Il est donc peu probable qu’elles existent déjà dans .NET, même en tant que jeu immuable de F #. Cela en vaudrait la peine pour les personnes qui ont besoin de ces structures de données.

Autres conseils

Revenant sur cette question des mois plus tard, je remarque que

http://lepensemoi.free.fr/index. php / tag / structures de données purement fonctionnelles

quelqu'un en a implémenté beaucoup sur ce blog.

Je n'ai pas suivi le lien, même si j'ai au moins une petite famille au travail ou à Okasaki. Donc, toute cette réponse est extrêmement spéculative (je suis peut-être mal fondé sur ce que contient l'API Edison).

Je pense qu'il y a "un avantage" dans le sens où les gens aiment "référencer les implémentations de structures de données de PF communes" dans "nouvelles langues" pour aider à l'apprentissage de nouvelles langues.

En ce qui concerne l’utilisation pratique (plutôt que pédagogique), j’espère que certaines d’entre elles seront utiles, bien que certaines API F # et .Net puissent être aussi utiles ou plus utiles pour de nombreux scénarios. Je suppose que les deux principaux lots de fonctionnalités qui se chevauchent sont les collections immuables F # (Set et Map), ainsi que le .Net 4.0 collections simultanées (comme ConcurrentQueue).

Bien sûr, vous trouverez également des extraits de code sur le Web, comme file d'attente immuable .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top