Можно ли изменить размер шага встроенной функции или литерала диапазона Haskell?
-
22-08-2019 - |
Вопрос
По умолчанию
[1..5]
дает это
[1,2,3,4,5]
а также может быть выполнено с помощью функции диапазона.Можно ли изменить размер шага между точками, чтобы вместо этого получить что-то вроде следующего?
[1,1.5,2,2.5,3,3.5,4,4.5,5]
Решение
[1,1.5..5]
Другие советы
Вы должны быть осторожны с арифметикой с плавающей запятой.Он не может точно представлять 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]
На самом деле, [1..5]
это синтаксический сахар для
enumFromTo 1 5
и [1,1.5..5]
для
enumFromThenTo 1 1.5 5
Для получения дополнительной информации см. http://en.wikibooks.org/wiki/Haskell/Syntactic_sugar
Не связан с StackOverflow