Можно ли изменить размер шага встроенной функции диапазона haskell или литерала? - PullRequest
9 голосов
/ 09 февраля 2009

по умолчанию

[1..5]

дает это

[1,2,3,4,5]

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

[1,1.5,2,2.5,3,3.5,4,4.5,5] 

Ответы [ 3 ]

20 голосов
/ 09 февраля 2009
[1,1.5..5]
18 голосов
/ 09 февраля 2009

Вы должны быть осторожны с арифметикой с плавающей запятой. Он не может точно представлять 1.1, поэтому, если вы попробуете

Prelude> [0,0.1 .. 1]
[0.0,0.1,0.2,0.30000000000000004,0.4,0.5,0.6,0.7,0.7999999999999999,0.8999999999999999,0.9999999999999999]

Лучший способ больше похож на:

Prelude> map (/10) [0..10]
[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
5 голосов
/ 10 февраля 2009

На самом деле, [1..5] является синтаксическим сахаром для

enumFromTo 1 5 

и [1,1.5..5] для

enumFromThenTo 1 1.5 5

Для получения дополнительной информации см. http://en.wikibooks.org/wiki/Haskell/Syntactic_sugar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...