Почему числовые литералы Haskell должны начинаться и заканчиваться цифрами? - PullRequest
3 голосов
/ 04 октября 2011

В В отчете Haskell 98 сказано, что

Плавающий литерал должен содержать цифры как до, так и после десятичной точки;это гарантирует, что десятичная точка не может быть ошибочно принята за другое использование символа точки.

Какое еще использование может быть?Я не могу представить ни одного такого юридического выражения.

(Чтобы прояснить мотивацию: я знаю, что многие люди пишут числа типа 9.0 или 0.7 все время без необходимости к, но я не могу подружиться с этим. Я в порядке с 0.7, а не с более компактными, но в остальном не лучше .7, но записанные конечные нули кажутся мне неправильными, если они не выражают какое-то количество точнодо десятых долей, что редко бывает в тех случаях, когда Хаскелл заставляет меня писать 9.0 -значения.)


Я забыл, что писать составление функций без окружающих пробелов допустимо!Это, конечно, возможно, хотя можно избежать этой проблемы, жадно разбирая плавающие литералы, например, replicate 3 . pred$8((replicate 3) . pred) 8, но replicate 3.pred$8(replicate 3.0 pred)8.


Нет выражения, гдецелочисленный литерал требуется , чтобы стоять непосредственно рядом с ., без пробелов?

Ответы [ 4 ]

4 голосов
/ 04 октября 2011

Одним из примеров другого использования является оператор точки (или любой другой оператор, начинающийся или заканчивающийся точкой): replicate 3.pred$8.

Другое возможное использование в выражениях диапазона: [1..10].

Кроме того, вы можете (почти) всегда писать 9 вместо 9.0, что исключает необходимость в . в целом.

3 голосов
/ 04 октября 2011

У меня нет особых проблем с разрешением «9».и «.7».Я думаю, что нынешний дизайн - это скорее отражение идей оригинальных дизайнеров Haskell.

3 голосов
/ 04 октября 2011

Одним из наиболее распространенных применений (.) является композиция функций.И поэтому компилятор haskell интерпретирует a . 1, составляющую функцию a с числом, и не знает, что делать;аналогично наоборот.Другое использование (.) может быть найдено здесь .

Другие проблемы с .7 против 0.7 мне не известны.

2 голосов
/ 04 октября 2011

Несмотря на то, что это, вероятно, может быть устранено неоднозначно, я не думаю, что можно многого добиться от разрешения .7 и 7.. Код предназначен для чтения людьми , а также машинами, и гораздо проще случайно пропустить десятичную точку на любом конце литерала, чем в середине.

Я возьму дополнительную читаемость над сохраненным байтом в любой день.

...