2009-01-20 16 views
1

J'ai juste essayé d'exécuter un petit script Lua, mais malheureusement je fais quelque chose de mal. Je n'ai plus d'idée de la faute.Lua - Erreur de syntaxe dans if-instruction

function checkPrime(n) 
    for i = 2, n-1, 1 do 
     if n % i == 0 then 
      return false 
     end 
    end 
    return true 
end 

L'interprète dit:

lua: /home/sebastian/luatest/test.lua:3: `then' expected near `%' 

Je pense que ce n'est pas une grande chose et peut-être il est tout à fait clair ce qui est faux. Mais de toute façon je ne peux pas le voir pour le moment.

+0

Sur une note non liée, il est parfaitement suffisant de vérifier les racines jusqu'à math.floor (math.sqrt (n)) instad de n-1, quand vous voulez vérifier si un nombre est premier ou non. –

+0

C'est vrai, mais j'utilise le script uniquement pour mesurer les temps d'exécution de différents langages de script. – okoman

Répondre

5

Il y a probablement un problème de version, vérifiez votre version de lua. L'utilisation de '%' comme opérateur infixe pour modulo ne peut être utilisé que dans Lua 5.1, dans 5.0 il n'est pas encore supporté. Essayez d'utiliser math.mod à la place:

if math.mod(n,i) == 0 then 

Modifier: Notez également que 5.1, math.mod existe encore, mais il a été renommé math.fmod. Pour l'instant, l'ancien nom fonctionne toujours, mais le support sera probablement supprimé dans les futures versions.

+0

Eh bien, j'aime ces messages d'erreur éclairant ... Merci! – okoman

-1

Avez-vous essayé d'envelopper "n% i == 0" entre parenthèses? Question stupide, mais parfois négligée!

+0

Entre parenthèses? Mais alors c'est une chaîne. Comme je le vois, LUA ne l'évalue pas ... – okoman

+0

Non, lua ne nécessite pas de parenthèses autour de l'expression, puisque 'if' et 'then' le délimitent parfaitement. –

+0

Ceci est une solution parfaite car elle permet à lua de traiter l'expression entière comme un seul booléen (et évite ainsi le message d'erreur cryptique). BTW, il ne se transforme pas en une chaîne si vous faites cela ... – RCIX