Haskell 创建一个具有特定增量的列表

标签 haskell

在数学语言中,您可以按如下方式创建向量:

x = seq(0, 2*pi, length.out = 100)

输出:

[1] 0.00000000 0.06346652 0.12693304 0.19039955 0.25386607 0.31733259 0.38079911
  [8] 0.44426563 0.50773215 0.57119866 0.63466518 0.69813170 0.76159822 0.82506474
 [15] 0.88853126 0.95199777 1.01546429 1.07893081 1.14239733 1.20586385 1.26933037
 [22] 1.33279688 1.39626340 1.45972992 1.52319644 1.58666296 1.65012947 1.71359599
 [29] 1.77706251 1.84052903 1.90399555 1.96746207 2.03092858 2.09439510 2.15786162
 [36] 2.22132814 2.28479466 2.34826118 2.41172769 2.47519421 2.53866073 2.60212725
 [43] 2.66559377 2.72906028 2.79252680 2.85599332 2.91945984 2.98292636 3.04639288
 [50] 3.10985939 3.17332591 3.23679243 3.30025895 3.36372547 3.42719199 3.49065850
 [57] 3.55412502 3.61759154 3.68105806 3.74452458 3.80799110 3.87145761 3.93492413
 [64] 3.99839065 4.06185717 4.12532369 4.18879020 4.25225672 4.31572324 4.37918976
 [71] 4.44265628 4.50612280 4.56958931 4.63305583 4.69652235 4.75998887 4.82345539
 [78] 4.88692191 4.95038842 5.01385494 5.07732146 5.14078798 5.20425450 5.26772102
 [85] 5.33118753 5.39465405 5.45812057 5.52158709 5.58505361 5.64852012 5.71198664
 [92] 5.77545316 5.83891968 5.90238620 5.96585272 6.02931923 6.09278575 6.15625227
 [99] 6.21971879 6.28318531

如何在 Haskell 中实现这一点?

我尝试创建一个 lambda 函数并将其与 map 一起使用,但无法获得相同的输出。

谢谢

let myPi = (\x -> 2*pi)
map myPi [1..10]

最佳答案

好吧,你可以这样做

[0, 2*pi/100 .. 2*pi]

请注意,这在性能和浮点舍入方面都不是理想的(因为它转换为 enumFromThenTo ),Daniel Fischer 的版本更好(它转换为 enumFromTo )。仔细想想,GHC 可能会将两者编译成几乎同样快的代码,但我不确定。如果它确实对性能至关重要,那么最好根本不要使用列表,但例如Data.Vector .

<小时/>

正如 Jakub Hammpl 所说,Haskell 可以处理无限列表。这对您来说可能没有多大用处,但它带来了有趣的可能性 - 例如,您可能不确定您实际需要哪种分辨率。您可以让列表以非常低的分辨率开始,然后向后折叠并以较高的分辨率重新开始。实现这一目标的一种简单方法:

import Data.Fixed

multiResS₁ = [ log x `mod'` 2*pi | x<-[1 .. ] ]

用它来绘制正弦函数看起来像这样

Prelude Data.Fixed Graphics.Rendering.Chart.Simple> let domainS₁ = take 200 multiResS₁
Prelude Data.Fixed Graphics.Rendering.Chart.Simple> plotPNG "multiresS1.png" domainS₁ sin

enter image description here

关于Haskell 创建一个具有特定增量的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482057/

相关文章:

haskell - 如何 "newtype"IntSet?

haskell - 这些一元表达式是否等价

haskell - 固定长度和类型文字的列表

haskell - 更改重新导出的类型和值的文档

haskell - 在 haskell-stack conf 文件中包含扩展

haskell - 为什么我可以使用我的值构造函数,即使我不导出它?

haskell - 在 Haskell 中,如何替换 ByteString 中的 ASCII 字符子字符串?

haskell - Haskell 中用于确定是否重复的显式递归

haskell - 提升类型的模式匹配

variables - HASKELL --- 有没有删除列表中元素的函数?