Donc faisaient cette affectation à Uni et j'ai un sérieux envie de faire la tâche dans haskell. C'est une simulation d'un moteur de négociation d'actions. La situation est que nous avons des données provenant d'un csv et nous voulons analyser chaque enregistrement et de le traiter d'une certaine manière en fonction de la phase de marché est alloué à. Justification de l'utilisation de haskell, c'est que je considère le moteur de trading comme un système fonctionnel lourd. J'ai eu haskell expérience avant mais seulement une expérience mineure, jamais rien de ce grand. Nous voulions exécuter un thread qui importerait les csvs dans une file d'attente de commandes non traitées et ensuite le programme principal accède à cette file d'attente pour traiter chaque commande. Cependant, comment pourrais-je atteindre ce que je sais dans C i serait juste mis en place la classe afin qu'il puisse accéder à la classe CSVParser qui tiendrait la file d'attente non traitée. Cela signifie également que le thread d'importation serait en cours d'exécution à travers toutes les phases du marché ou jusqu'à ce qu'il a terminé l'importation du fichier csv. Toute orientation sur la façon de réaliser ce serait formidable (ne cherche pas un script entièrement dactylographié, juste ce que les choses dans haskell je devrais regarder) demandé Mar 29 12 à 23h33 fermé comme pas une vraie question par Ritch Melton. Dflemstr. Flexo 9830. Michael Petrotta. Graviton Mar 30 12 à 1:45 Il est difficile de dire ce qui est demandé ici. Cette question est ambiguë, vague, incomplète, trop large, ou rhétorique et ne peut pas être raisonnablement répondu dans sa forme actuelle. Pour obtenir de l'aide pour clarifier cette question afin qu'elle puisse être rouverte, consultez le centre d'aide. Si cette question peut être reformulée pour correspondre aux règles du centre d'aide. S'il vous plaît éditer la question. C'est l'exemple qui m'a convaincu d'apprendre Haskell (et le garçon suis-je heureux que j'ai fait). OK, c'est un programme court et lisible. En ce sens, c'est mieux qu'un programme C. Mais comment est-ce si différent de (disons) un programme Python avec une structure très similaire La réponse est l'évaluation paresseuse. Dans la plupart des langues (même certaines fonctionnelles), un programme structuré comme celui ci-dessus entraînerait le chargement complet du fichier dans la mémoire, puis l'écriture sous un nouveau nom. Haskell est paresseux. Il doesnt calculer les choses jusqu'à ce qu'il ait besoin, et par extension doesnt calculer des choses dont il n'a jamais besoin. Par exemple, si vous deviez supprimer la ligne writeFile, Haskell n'aurait pas pris la peine de lire quoi que ce soit du fichier en premier lieu. Comme il est, Haskell réalise que le writeFile dépend de readFile. Et est donc en mesure d'optimiser ce chemin de données. Alors que les résultats dépendent du compilateur, ce qui se produit généralement lorsque vous exécutez le programme ci-dessus est la suivante: le programme lit un bloc (par exemple 8KB) du premier fichier, puis écrit dans le deuxième fichier, puis lit un autre bloc du premier Fichier, et l'écrit dans le deuxième fichier, et ainsi de suite. (Essayez running strace on it) qui ressemble beaucoup à ce que l'implémentation C efficace d'une copie de fichier ferait. Ainsi, Haskell vous permet d'écrire des programmes compacts et lisibles - souvent sans sacrifier beaucoup de performances. Une autre chose que je dois ajouter est que Haskell rend tout simplement difficile d'écrire des programmes buggy. Le système de type étonnant, le manque d'effets secondaires, et bien sûr la compacité du code Haskell réduit les bugs pour au moins trois raisons: Meilleure conception du programme. La complexité réduite entraîne moins d'erreurs logiques. Code compact. Moins de lignes pour les bugs à exister. Compiler les erreurs. Beaucoup de bugs juste arent Haskell valide. Haskell n'est pas pour tout le monde. Mais tout le monde devrait essayer. It39s étonnant que cette réponse a 116 upvotes encore what39s dedans là est juste faux. Ce programme lira le fichier entier, à moins que vous n'utilisiez des octets par défaut (ce que vous pouvez faire avec Data. Bytestring. Lazy. readFile), qui n'ont rien à voir avec Haskell étant un langage paresseux (non strict). Les monades sont séquençage - cela signifie approximativement quotall les effets secondaires sont effectués lorsque vous sortez le résultatquot. Quant à la magie quotlazy Bytestringquot: c'est dangereux, et vous pouvez le faire avec une syntaxe similaire ou plus simple dans la plupart des autres langues. Ndash Jo So Oct 12 16 at 23:06 JoSo, je pense que vous avez raison, et ce que nous voyons dans strace est une optimisation du compilateur. Pourtant, le fait que Haskell permet de telles optimisations est assez impressionnant. Ndash Artelius Oct 14 16 at 22:59 Vous êtes en train de poser la mauvaise question. Haskell n'est pas une langue où vous allez regarder quelques exemples cool et aller aha, je vois maintenant, thats ce qui le rend bon Son plus comme, nous avons tous ces autres langages de programmation, et theyre tous plus ou moins similaires, et puis theres Haskell qui est totalement différent et farfelu d'une manière thats totalement impressionnant une fois que vous vous habituez à la folie. Mais le problème est, il faut un certain temps pour s'acclimater à la folie. Ce qui distingue Haskell de pratiquement n'importe quelle autre langue semi-traditionnelle: Évaluation paresseuse Pas d'effets secondaires (tout est pur, IOetc passe par des monades) Système de type statique incroyablement expressif ainsi que certains autres aspects qui sont différents de beaucoup de langues traditionnelles Mais partagé par certains): type d'espace blanc significatif fonctionnel inféré Comme certains autres affiches ont répondu, la combinaison de toutes ces caractéristiques signifie que vous pensez à la programmation d'une manière entièrement différente. Il est donc difficile de trouver un exemple (ou un ensemble d'exemples) qui communique adéquatement cela à Joe-mainstream-programmer. C'est une chose expérientielle. (Pour faire une analogie, je peux vous montrer des photos de mon voyage de 1970 en Chine, mais après avoir vu les photos, vous ne savez toujours pas ce que c'était d'avoir vécu là pendant ce temps. Parlement, je peux vous montrer un quicksort Haskell, Mais vous ne savez toujours pas ce que cela signifie d'être un Haskeller.) Je trouve plus intéressant que l'algorithme de quicksort original Hoare39 a été bâclé dans cette forme de listes hors-place apparemment pour que les mises en œuvre inutilement inefficace pourrait être écrit quotelegantly dans Haskell. Si vous essayez d'écrire un vrai quicksort (in-place) dans Haskell, vous trouverez qu'il est laid comme l'enfer. Si vous essayez d'écrire un quicksort générique compétitif-performant dans Haskell, you39ll trouve qu'il est réellement impossible en raison de bugs de longue date dans GHC39s garbage collector. Hailing quicksort comme un bon exemple pour la croyance Haskell mendiants, IMHO. Ndash Jon Harrop Dec 12 09 at 6:27 Une chose que je trouve très cool lorsque vous traitez avec des algorithmes ou des problèmes mathématiques est Haskells inhérente évaluation paresseuse de calculs, ce qui n'est possible qu'en raison de sa nature fonctionnelle stricte. Par exemple, si vous voulez calculer tous les nombres premiers, vous pouvez utiliser et le résultat est en réalité une liste infinie. Mais Haskell l'évaluera de gauche à droite, aussi longtemps que vous n'essayez pas de faire quelque chose qui requiert la liste entière, vous pouvez toujours l'utiliser sans que le programme soit bloqué à l'infini, comme: qui somme tous les nombres premiers de moins de 100. C'est bien pour plusieurs raisons. Tout d'abord, je n'ai besoin que d'écrire une fonction première qui génère tous les nombres premiers et puis je suis presque prêt à travailler avec des nombres premiers. Dans un langage de programmation orienté objet, j'aurais besoin d'un moyen de dire à la fonction combien de primes il devrait calculer avant de retourner, ou d'imiter le comportement de la liste infinie avec un objet. Une autre chose est que, en général, vous finissez par écrire du code qui exprime ce que vous voulez calculer et non pas dans quel ordre d'évaluer les choses - au lieu du compilateur fait cela pour vous. Ce n'est pas seulement utile pour les listes infinies, en fait, il est utilisé sans que vous le sachiez tout le temps quand il n'ya pas besoin d'évaluer plus que nécessaire. Cela n'est pas entièrement vrai avec le comportement de retour de rendement de C (un langage orienté objet), vous pouvez également déclarer des listes infinies qui sont évaluées à la demande. Ndash Jeff Yates Apr 22 09 à 5:43 Bon point. Vous avez raison et je devrais éviter de dire catégoriquement ce qui peut et ne peut pas être fait dans d'autres langues. Je pense que mon exemple a été imparfait, mais je pense toujours que vous gagnez quelque chose de Haskell39s façon de l'évaluation paresseuse: it39s vraiment là par défaut et sans aucun effort du programmeur. Et cela, je crois, est dû à sa nature fonctionnelle et à l'absence d'effets secondaires. Ndash waxwing Alors qu'il est certainement vrai que les systèmes de type fort exigent généralement que vous adhérer à eux (that39s ce qui rend leur force utile), il est également le cas que beaucoup (la plupart) existants systèmes de type HM-bas, En fait, avoir une sorte de hachage39 comme décrit dans le lien (prendre Obj. magic dans O39Caml comme un exemple, bien que je n'ai jamais utilisé, sauf comme un hack) dans la pratique, cependant, pour de nombreux types de programmes, on n'a jamais besoin d'un tel dispositif. Ndash Zach Snow Apr 22 09 at 6:08 La question de savoir si la définition de variables est quotaisible dépend de combien il est la douleur d'utiliser les constructions alternatives vs combien de douleur est causée par l'utilisation de variables. Ce n'est pas pour rejeter l'argument entier, mais plutôt pour souligner que la prise de la déclaration quotvariables sont une construction très souhaitable comme un axiome n'est pas la base d'un argument convaincant. Il se trouve être la façon dont la plupart des gens apprennent à programmer. Ndash gtd Apr 22 09 at 7: 31Tybee est une bibliothèque de négociation d'actifs qui utilise des techniques d'optimisation stochastiques non linéaires. Sa conception et son utilisation sont détaillées ci-dessous. Il est principalement conçu et mis en œuvre comme une expérience de pensée. Je ne garantis pas que cet algorithme ou ce logiciel sera réussi ou rentable avec n'importe quel actif. Il doit être utilisé à ses propres risques (voir LICENCE). Il est écrit dans Haskell. Pourquoi est-il appelé Tybee Tybee est une île au large de la côte de la Géorgie. Si vous allez là-bas, assurez-vous de frapper le Crab Shack. C'est génial. Toujours sur ce point. Tybee utilise une idée simple. Compte tenu de l'historique des actifs, imaginons un modificateur sur le prix moyen courant X tel que nous l'achèterons lorsque le prix demandé atteindra Cur X. puis nous vendreons lorsque le prix achevé atteindra Cur Y (Y gt X) ou Cur Z (Z lt X ) (Un stoploss ou un plancher). La fonction objectif d'optimisation simule ce comportement commercial avec un ensemble donné d'entrées (X, Y, Z) en utilisant les données historiques des prix de l'actif. La fonction d'optimisation est à l'ordre du jour, mais il est actuellement programmé pour être SPSA (implémentation). Vous pouvez installer via cabal (ou cabal-dev) Obtenir la source Obtenez la source tybee. Mettre en place un bac à sable. La première fois, vous avez besoin de télécharger et d'installer une tonne de dépendances, alors accrochez-vous là. La commande cabal-dev est juste une enveloppe de sandboxing autour du commandement de la cabale. Le drapeau - j ci-dessus indique à cabal d'utiliser tous vos processeurs, donc même la compilation initiale ne devrait pas prendre plus de quelques minutes. Remarque . Pour le mode de développement, utilisez --flagsdeveloper. Le mode de développement vous permet d'exécuter des tests à partir de ghci facilement pour permettre un bon vieux TDD. Une fois que vous avez construit le code, vous pouvez exécuter toute la suite de tests en quelques secondes. Nous utilisons les exécutables directs plutôt que les tests cabal-dev parce qu'il ne passe pas très bien par les options. Le RTS-N ci-dessus indique GHCs runtime système d'utiliser tous les cœurs disponibles. Si vous voulez explorer, le programme de tests (distbuildteststests) accepte une option --help. Essaye le. Tests à partir de GHCI Vous pouvez exécuter tous les tests à partir de ghci. Démarre la REPL. Ou vous pouvez exécuter un seul test
No comments:
Post a Comment