Javascript F#发电机等效函数

Javascript F#发电机等效函数,javascript,f#,Javascript,F#,在JavaScript中,ES6 flavor引入了生成器函数,因此这种构造是可能的: var fib = function *(max) { var x = 0, y = 1, tmp = 1; while (tmp<max) { yield tmp; x = y; y = tmp; tmp = x + y; } } var fibgen = fib(3000); var fib=函数*(最大值){ 变量x=0,y=1,tmp=1; whi

在JavaScript中,ES6 flavor引入了生成器函数,因此这种构造是可能的:

var fib = function *(max) {
  var x = 0, y = 1, tmp = 1;
  while (tmp<max) {
    yield tmp;
    x = y; 
    y = tmp;
    tmp = x + y;
  }
}
var fibgen = fib(3000);
var fib=函数*(最大值){
变量x=0,y=1,tmp=1;
while(tmp请参阅给定问题的可能解决方案,使用
序列展开

let fibTo limit =
    Seq.unfold (fun (a, b) -> Some (b, (b, a+b))) (0I, 1I)
    |> Seq.takeWhile (fun i -> i <= limit)
输出:
11123581132134558914423337761098715972584

fibTo (pown 10I 30)
返回最高达898923707008479989274290850145的Fibonnaci序列–如果计算到该值,则最后一个值不大于10^30。

请参阅。使用
Seq.unfold可以解决给定问题:

let fibTo limit =
    Seq.unfold (fun (a, b) -> Some (b, (b, a+b))) (0I, 1I)
    |> Seq.takeWhile (fun i -> i <= limit)
输出:
11123581132134558914423337761098715972584

fibTo (pown 10I 30)

返回Fibonnaci序列,最高为898923707008479989274290850145–如果计算到该值,最后一个值不大于10^30。

您尝试的解决方案在哪里?我是函数式编程的初学者。我所能想到的是命令式实现。这不是我想要的。您应该澄清一下(通过编辑问题)你在寻找什么。使用序列表达式和可变变量,F#中的等价结构实际上是相同的。你想知道惯用的F#方法吗?还是惯用的函数方法?我同意这还不够清楚。我不是在寻找斐波那契数列的算法。但对于某些生成函数,它会在迭代时,它是一个值。很抱歉造成混淆!我知道你是新来的,因此,当问一个问题时,你尝试或发现了什么,我们可以看到,你没有懒惰,让我们做所有的工作。因此,你在你的问题上获得了选票。你尝试的解决方案在哪里?我是v我是函数式编程的初学者。我能想到的只是命令式实现。这不是我想要的。你应该澄清(通过编辑问题)你在寻找什么。使用序列表达式和可变变量,F#中的等价结构实际上是相同的。你想知道惯用的F#方法吗?还是惯用的函数方法?我同意这还不够清楚。我不是在寻找斐波那契数列的算法。但对于某些生成函数,它会在迭代时,它是一个值。很抱歉造成混淆!我知道您是新手,因此,当您提出一个问题时,您尝试或发现的内容会显示出来,以便我们可以看到,您并不是在偷懒,让我们做所有的工作。因此,您在您的问题上获得了选票。