Haskell: importer une fonction ecrit dans un fichier.

vladimir14k Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
vladimir14k Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, les erreurs retournées sont-elles secrètes?
0
vladimir14k Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention  
 
MERCI BIEN POUR TON SOUCI POUR MOI. Je veux me mettre aux recherches. Merci encore
0