2010-11-22 6 views
12

Je suis un débutant Haskell, essayant d'accomplir un exercice de chiffrement César.Comment utiliser une fonction de bibliothèque Haskell?

Dans un fichier .hs, je défini la fonction suivante:

let2int :: Char -> Int 
let2int c = ord c - ord 'a' 

Je tente de charger cela en GHCi en tapant :l caeser.hs et je reçois le message d'erreur suivant:

[1 of 1] Compiling Main    (caeser.hs, interpreted) 
caeser.hs:2:12: Not in scope: `ord' 
caeser.hs:2:20: Not in scope: `ord' 

De la livre que j'utilisais, j'avais l'impression que ord et chr étaient des fonctions standard pour la conversion entre les caractères et les entiers, mais il semble évident que j'ai besoin de les "importer" ou quelque chose. Comment cela est-il fait?

+2

BTW, vous misspelt « Caesar » – wnoise

+0

Je cherchais à charger une bibliothèque de la ligne de commande GHCi, je trouve que vous pouvez utiliser cette commande à la ligne de commande: ': m Data.Char' – metatron

Répondre

3

Si vous utilisez hoogle pour rechercher ord, vous verrez que la fonction vit dans/est exportée par le module Data.Char. Il suffit donc d'importer ce module:

import Data.Char 

Apprenez à utiliser hoogle. La plupart des questions posées par SO Haskell sont le résultat de personnes ne connaissant pas Hoogle ... et parfois elles ne doivent pas non plus être au courant de Google (pour ne pas vous décourager de demander, mais utiliser hoogle).

À l'avenir, pour les grandes bibliothèques qui pourraient avoir des noms en conflit avec des fonctions existantes, vous pouvez limiter votre importation juste la fonction que vous aimez:

import Data.Char (ord) 

Ou importer qualified:

import qualified Data.Char as C 
... 
func x y = C.ord x - C.ord y 

(une troisième méthode, en utilisant hiding, fonctionne mais je déteste cette méthode)

+0

J'ai vérifié Hoogle, mais je ne savais pas quoi faire avec les informations que j'ai reçues. Merci. –

9

Dans "Haskell 2010", ord vit à Data.Char

Vous aurez envie import Data.Char ou import Data.Char (ord)

Dans "Haskell 98", ord se trouvent dans le module Char.

Un excellent outil pour trouver des fonctions et leurs modules est

http://www.haskell.org/hoogle/