2010-06-07 6 views
0

Ce code n'est pas pour moi compilerai: let countDown = [5L .. −1L .. 0L];;F # - Ce code ne compile pour moi

J'ai un book (page 33) qui dit qu'il devrait retourner ceci:
val countDown : int list = [5L; 4L; 3L; 2L; 1L; 0L]

compilateur Erreur:

Program.fs(42,24): error FS0010: Unexpected character '−' in expression 
> 
> let countDown = [5L .. −1L .. 0L];; 

    let countDown = [5L .. −1L .. 0L];; 
    -----------------------^ 

Le livre est faux. mais pourquoi? Est-ce une mise à jour de la langue? quel est le moyen d'y parvenir?

Edit: le problème est que le caractère copié à partir du PDF, est pas le caractère -.

+3

Je suis sûr que le compilateur vous a probablement donné une erreur autre que "ne pas compiler". Vous devriez le partager. – Donnie

+0

oui, et quelle est votre question? –

+0

Eh bien, ce livre se trompe également sur le 'int' au lieu de' int64' – stacker

Répondre

9

Votre code d'origine fonctionne bien pour moi, même sans les modifications que Igor suggéré:

Microsoft (R) F# 2.0 Interactive build 4.0.30319.1 
Copyright (c) Microsoft Corporation. All Rights Reserved. 

> let l = [ 10L .. -1L .. 0L ];; 
val l : int64 list = [10L; 9L; 8L; 7L; 6L; 5L; 4L; 3L; 2L; 1L; 0L] 

Une erreur subtile possible est que si vous (par exemple) collé le code à partir de Word (ou d'un autre programme), il peut avoir remplacé le symbole - par un autre type de tiret qui a la même apparence, mais qui a en fait un code différent.

Une autre façon de casser le code est de supprimer certains espaces - par exemple, il doit y avoir un espace entre .. et. Sinon, je ne vois pas pourquoi cela ne devrait pas fonctionner.

+0

Vous avez raison. Le '-' que j'ai copié à partir de l'ebook, n'est pas la balise' -'. – stacker

2

Essayez ceci:

let countDown = [5L .. (-1L) .. 0L];; 

Ou ceci:

let countDown = [5 .. -1 .. 0];; 

Les deux puces fonctionnera.

Voici quelques sortie:

> let countDown = [5 .. -1 .. 0];; 

val countDown : int list = [5; 4; 3; 2; 1; 0] 

> let countDown = [5L .. (-1L) .. 0L];; 

val countDown : int64 list = [5L; 4L; 3L; 2L; 1L; 0L] 
+0

Le premier a la même erreur. – stacker

+0

A travaillé pour moi dans VS 2010. –

+0

Maintenant ça marche. Je ne sais pas pourquoi ça ne fonctionnait pas avant, j'utilise aussi vs2010. – stacker

Questions connexes