gpt4 book ai didi

scala - 在 Scala 中使用 Streams 进行迭代

转载 作者:行者123 更新时间:2023-12-04 02:50:48 26 4
gpt4 key购买 nike

SICP说迭​​代过程(例如平方根计算的牛顿法、“pi”计算等)可以用 Streams 来表述。 .

有人用吗streams在 Scala 中模拟迭代?

最佳答案

这是产生 pi 近似值流的一种方法:

val naturals = Stream.from(0) // 0, 1, 2, ...
val odds = naturals.map(_ * 2 + 1) // 1, 3, 5, ...
val oddInverses = odds.map(1.0d / _) // 1/1, 1/3, 1/5, ...
val alternations = Stream.iterate(1)(-_) // 1, -1, 1, ...
val products = (oddInverses zip alternations)
.map(ia => ia._1 * ia._2) // 1/1, -1/3, 1/5, ...

// Computes a stream representing the cumulative sum of another one
def sumUp(s : Stream[Double], acc : Double = 0.0d) : Stream[Double] =
Stream.cons(s.head + acc, sumUp(s.tail, s.head + acc))

val pi = sumUp(products).map(_ * 4.0) // Approximations of pi.

现在,假设您想要第 200 次迭代:
scala> pi(200)
resN: Double = 3.1465677471829556

...或第 300000 个:
scala> pi(300000)
resN : Double = 3.14159598691202

关于scala - 在 Scala 中使用 Streams 进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com