Javascript 有没有什么很酷的方法可以使用惰性求值序列来定义/calc PI?

Javascript 有没有什么很酷的方法可以使用惰性求值序列来定义/calc PI?,javascript,node.js,functional-programming,lazy-evaluation,Javascript,Node.js,Functional Programming,Lazy Evaluation,我在javascript上使用lazy.js 我想知道是否有一个很酷的方法来定义(实际上不是计算)由惰性评估授权的PI 我知道lazy求值是按需调用的,但是如何在lazy求值代码中定义PI呢 例如,我们可以在lazy.js中定义自然数无限序列: var _ = Lazy; var natural = function(n) { return n; }; var _natural = _.generate(natural); 当然,因为它是按需调用的,所以您只能获得一部分自然数,如 va

我在javascript上使用lazy.js

我想知道是否有一个很酷的方法来定义(实际上不是计算)由惰性评估授权的PI

我知道lazy求值是按需调用的,但是如何在lazy求值代码中定义PI呢

例如,我们可以在lazy.js中定义自然数无限序列:

var _ = Lazy; 
var natural = function(n)
{
  return n;
};

var _natural = _.generate(natural);
当然,因为它是按需调用的,所以您只能获得一部分自然数,如

var n100 = _natural.take(100).toArray();
有没有办法定义类似π的自然数


谢谢

有一种很酷的方法,可以通过展开无限多个连续近似值来缓慢地计算pi。这些就是所谓的“无界龙头”算法(无界的,因为它们利用惰性产生无限多更好的答案)

参见,其中给出了一个(故意模糊的)示例:

pi = g(1,0,1,1,3,3) where
 g(q,r,t,k,n,l) =
  if 4*q+r-t<n*t
  then n : g(10*q,10*(r-n*t),t,k,div(10*(3*q+r))t-10*n,l)
  else g(q*k,(2*q+r)*l,t*l,k+1,div(q*(7*k+2)+r*l)(t*l),l+2)
pi=g(1,0,1,1,3,3),其中
g(q,r,t,k,n,l)=
如果4*q+r-t