此代码不是为我编译的: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复制的−
字符不是-
字符。
答案 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]