La bibliothèque standard de OCAML contient divers modules: Où puis-je trouver ça? p> Liste code>,
,
,
Nativeint code>, etc. Je sais que les interfaces pour ces modules sont fournies (par exemple pour le Module de liste ), mais je suis intéressé dans les algorithmes et leurs implémentations utilisées dans les fonctions des modules. P>
3 Réponses :
Vous pouvez trouver les définitions du code source OCAML. Par exemple, la mise en œuvre de la carte code> fonctionne code> est dans stdlib / map.ml code> dans la distribution de la source OCAML. P>
Ils doivent déjà être installés sur votre système. Très probablement (en supposant un système UNIX), ils sont situés dans / usr / lib / ocaml ou / usr / local / lib / ocaml. Il suffit d'ouvrir n'importe lequel des fichiers .ml code>. P>
/usr/lib/ocaml/list.ml code> et d'autres .ml code> fichiers li>
- sur le Web: https://github.com/ocaml /Occaml/blob/trunk/stdlib/list.ml et autre
.ml code> dans https://github.com/ocaml/ocaml/tree/trunk/stdlib li>
La mise en œuvre de la liste est intéressante à étudier. Par exemple, la fonction mappe code> pourrait être implémentée comme ceci: p> xxx pré> mais est mis en œuvre comme ceci: p> xxx Quelle est la différence? Exécutez ceci: p>
List.map print_int [1;2;3] ;;
map print_int [1;2;3] ;;
Pouces vers le haut ! (Voici le blog poteau, mais je trouve un peu trop arcan pour un débutant: OCAML. Janestreet.com/?q=node/71 )
Quelqu'un peut-il clarifier la différence entre les première et deuxième implémentations? Quand je les exécute dans OCAML et F # Je reçois 123 pour les deux, jamais 321. Étant donné que cette réponse a 7 ans, peut-être que OCAML et F # changèrent fondamentalement, mais j'en doute? (Je n'utilise pas list.Map, je teste les deux fonctions de carte personnalisées telles -es)
@gasche aucune idée?
Je peux reproduire le fait que ignorer (carte print_int [1; 2; 3]) code> imprimera 321 pour les versions récentes de OCAML avec le
FA :: MAP F LI CODE> Version de carte. @jayphelps, quelque chose peut être faux avec votre configuration de test.
@gasche merci! Jayphelps a posé sa propre question, qui a conduit à plus de discussions sur cette question (surtout dans les commentaires): Stackoverflow.com/questions/43882340/...
@gasche ouais L'incohérence était la repluée les a évaluées dans un ordre différent - mais ma question fondamentale ne réalisait pas OCAML (contrairement à F # et SML) ne garantit pas l'ordre d'évaluation. C'est "non spécifié"