2010-06-07 76 views
0

這個代碼不編譯對我來說:let countDown = [5L .. −1L .. 0L];;F# - 這個代碼不編譯我

我有一個book(第33頁),指出它應該返回此:
val countDown : int list = [5L; 4L; 3L; 2L; 1L; 0L]

編譯錯誤:

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

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

這本書是錯的。但爲什麼?這是對語言的更新嗎?有什麼辦法實現這一目標?

編輯:問題是從PDF複製的字符不是-字符。

+3

我確定編譯器可能給你一個錯誤,而不是「我沒有編譯」。你應該分享它。 – Donnie 2010-06-07 02:36:24

+0

是的,你的問題是什麼? – 2010-06-07 02:39:35

+0

那麼這本書也是錯誤的'int'而不是'int64' – stacker 2010-06-07 02:52:36

回答

9

你原來的代碼工作正常,我即使沒有修改伊戈爾·建議:

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] 

可能的微妙的錯誤是,如果你(例如)粘貼來自Word(或其他程序)的代碼,它可能已將-符號替換爲看起來相同但實際上具有不同代碼的其他類型的破折號。

打破代碼的另一種方法是刪除一些空格 - 例如,..-1L之間必須有一個空格。否則,我不明白爲什麼它不應該工作。

+0

你說得對。我從電子書中複製的'-'不是'-'標籤。 – stacker 2010-06-07 19:57:02

2

試試這個:

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

或者這樣:

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

以上兩者都會工作。

下面是一些輸出:

> 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

第一個有同樣的錯誤。 – stacker 2010-06-07 02:40:54

+0

在VS 2010中爲我工作。 – 2010-06-07 02:45:05

+0

現在工作。我不確定爲什麼它沒有之前,我也使用vs2010。 – stacker 2010-06-07 02:48:04