Problème de curryfication

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut à tous,

j'étais en train de résoudre un problème sur codingames et pour cela j'ai fait une fonction qui transforme une chaîne de caractères en une liste d'entiers que voici

1
2
toInt :: String -> [Int]
toInt str = map (read::String->Int) $ words str

Et donc comme la fonction se présente et grâce à la curryfication je me suis dit que je pouvais l'écrire ainsi

1
2
toInt :: String -> [Int]
toInt = map (read::String->Int) $ words

hors cette écriture me renvoie cette erreur

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Prelude> :l test
[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:398:9:
    Couldn't match expected type ‘String -> [Int]’
                with actual type ‘[Int]’
    In the expression: map (read :: String -> Int) $ words
    In an equation for ‘toInt’:
        toInt = map (read :: String -> Int) $ words

test.hs:398:35:
    Couldn't match expected type ‘[String]’
                with actual type ‘String -> [String]’
    Probable cause: ‘words’ is applied to too few arguments
    In the second argument of ‘($)’, namely ‘words’
    In the expression: map (read :: String -> Int) $ words
Failed, modules loaded: none.

et je ne comprends vraiment pas pourquoi. Donc si vous connaissez la solution et que vous pouvez m'expliquer mon erreur je serai ravi.

Merci d'avance pour votre aide. :)

« La Nature est un livre écrit en langage mathématique », Galilée

+0 -0

Cette réponse a aidé l'auteur du sujet

bonjour,

$ n’est pas l’opérateur de composition, mais d’application. f $ x signifie simplement f x, mais permet d’économiser des parenthèses grâce à la priorité des opérateurs. ici, ton code se parenthèse comme suit :

1
toInt str = (map (read::String->Int)) $ (words str)

tu ne peux donc pas η‐réduire ta fonction aussi simplement. ce que tu veux est l’opérateur de composition, noté . ;-)

1
toInt str = map (read::String->Int) . words

écrire français sous Windows : fr-oss (azerty++) ou bépo (étudié pour le français) | <insérer un truc spirituel ici>

+4 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte