2010-06-07 52 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