Haskell: importer une fonction ecrit dans un fichier.

Fermé
vladimir14k Messages postés 34 Date d'inscription mercredi 9 janvier 2019 Statut Membre Dernière intervention 14 août 2020 - 10 déc. 2019 à 16:23
vladimir14k Messages postés 34 Date d'inscription mercredi 9 janvier 2019 Statut Membre Dernière intervention 14 août 2020 - 12 déc. 2019 à 14:29
Bonsoir a vous tous. J’espère que tout le monde se porte bien.
Je suis un débutant en programmation Haskell. Cependant, j'aimerais importer une fonction pgcd qui se trouve dans le fichier pgcd.hs et l'inclure dans le fichier ppcm.hs. en faisant import pgcd.hs dans ppcm.hs, j'ai des erreurs retournées. Aidez-moi s'il vous plaît.

{- Voici le fichier ppcm.hs -}
import "/home/gnu/ipf/pgcd.hs"
ppcm :: Int->Int->Int
ppcm a b = if a == b then b
else a * b / pgcd a b

{- Voici le fichier pgcd.hs: le fihier pgcd s'execute bien-}
pgcd :: Int->Int->Int
pgcd a b = if mod a b == 0 then b
else b `pgcd` (mod a b)

2 réponses

yg_be Messages postés 23337 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
11 déc. 2019 à 11:54
bonjour, les erreurs retournées sont-elles secrètes?
0
vladimir14k Messages postés 34 Date d'inscription mercredi 9 janvier 2019 Statut Membre Dernière intervention 14 août 2020
12 déc. 2019 à 05:05
ppcm.hs:1:8: error:
parse error: ‘/home/gnu/ipf/pgcd.hs’
Version number or non-alphanumeric character in package name
|
1 | import "/home/gnu/ipf/pgcd.hs"
| ^^^^^^^^^^^^^^^^^^^^^^^
Failed, no modules loaded.
Prelude>
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 12 déc. 2019 à 11:15
Salut vladimir14k,

Je ne connais pas trop bien Haskell, même si je m'intéresse à ce langage que j'aimerais apprendre (demain je m'y mets..., enfin un jour, heu, bon c'est dans ma TODO list pour quand j'aurai le temps :-P)... alors ce qui suit est sans doutes à prendre avec un grain de sel.

Je crois que tu devrais te renseigner sur les Modules en Haskell. D'après ma compréhension, la directive import ne sert pas à importer un fichier, mais à importer les entités exportées par un Module.

https://www.haskell.org/onlinereport/haskell2010/haskellch5.html
https://www.haskell.org/tutorial/modules.html

L'erreur en question semble directement provoquée par le fait que : "Module names are alphanumeric and must begin with an uppercase letter", ce qui ne correspond pas à ce qu'il y a à la suite de ton import (les guillemets, slashs, point et l'absence de majuscule initiale rendent la ligne syntaxiquement incorrecte).

Selon ma compréhension, ta directive d'import devrait être juste
import Pgcd
(dans sa forme la plus simple).

Pour faire de ton programme un Module exportant la fonction que tu souhaites, vois la doc (en particulier "5.1 Module Structure" et "5.2 Export Lists".

Une fois que tu as un Module , tu peux placer le fichier qui le contient dans le même répertoire que le programme qui l'importe, afin que Haskell le trouve.

Si tu tiens à le mettre dans un autre répertoire, lis ceci pour plusieurs solutions permettant de passer l'information à Haskell sur les répertoires où peuvent se trouver les Modules auxquels un programme peut accéder :

https://stackoverflow.com/questions/5034685/what-is-the-haskell-syntax-to-import-modules-in-subdirectories

Ne m'étant intéressé à Haskell que de très loin, je suis peut-être à côté de la plaque (j'invite les personnes savantes sur le forum en Haskell à se manifester), mais si ce que je décris ci-dessus peut t'aider, tant mieux :-)


Dal
0
vladimir14k Messages postés 34 Date d'inscription mercredi 9 janvier 2019 Statut Membre Dernière intervention 14 août 2020
12 déc. 2019 à 14:29
MERCI BIEN POUR TON SOUCI POUR MOI. Je veux me mettre aux recherches. Merci encore
0