F# - 这段代码不是为我编译的

时间:2010-06-07 02:26:11

标签: f#

此代码不是为我编译的:let countDown = [5L .. −1L .. 0L];;

我有一个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复制的字符不是-字符。

2 个答案:

答案 0 :(得分:9)

即使没有Igor建议的修改,您的原始代码也能正常工作:

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之间必须有空格。否则,我认为没有任何理由不起作用。

答案 1 :(得分: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]