2017-05-08 4 views
0

J'essaye d'écrire une fonction Great Divisor commune en haskell. C'est ce que j'ai jusqu'à présent:Erreur d'analyse d'erreur haskell sur l'entrée '|'

gcd1 :: Int -> Int -> Int 
gcd1 a b 
    | a == 0 = b 
    | b == 0 = a 
    | otherwise = gcd (mod a b) 

Lorsque j'essaie de compiler, j'obtiens cette erreur. J'ai lu comment haskell utilise l'espace blanc pour déterminer où une déclaration de fonctions commence et où le corps commence, mais je continue d'essayer avec une quantité différente d'espaces et d'obtenir la même erreur. Y a-t-il quelque chose qui me manque?

+1

devinez - vous mélangez des onglets et des espaces? - Allumez '-Wall' -Il devrait y avoir un avertissement à ce sujet ou faire une recherche et remplacer' s/\ t// g' juste pour être sûr – epsilonhalbe

+0

Je l'ai mis dans un fichier + un 'où gcd = undefined' et il compilé sans aucun problème – epsilonhalbe

Répondre

2

Sur la dernière ligne, gcd doit être appliqué sur 2 arguments. Vous ne l'appliquez qu'à un -> (mod a b). Aussi, comme d'autres l'ont mentionné, vous mélangez probablement vos espaces et vos onglets. Je recommande seulement d'utiliser des espaces. Une autre chose, lors de la définition de la fonction GCD, il était probablement prévu que vous n'utilisiez pas la fonction gcd prédéfinie dans votre implémentation.