F # - Этот код не компилируется для меня - PullRequest
0 голосов
/ 07 июня 2010

Этот код не компилируется для меня: let countDown = [5L .. −1L .. 0L];;

У меня есть книга (стр. 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 ]

9 голосов
/ 07 июня 2010

Ваш оригинальный код прекрасно работает даже без модификаций, которые предложил Игорь:

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 должен быть пробел. В противном случае я не вижу причин, по которым это не должно работать.

2 голосов
/ 07 июня 2010

Попробуйте это:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...