Javascript F#发电机等效函数
在JavaScript中,ES6 flavor引入了生成器函数,因此这种构造是可能的: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
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#方法吗?还是惯用的函数方法?我同意这还不够清楚。我不是在寻找斐波那契数列的算法。但对于某些生成函数,它会在迭代时,它是一个值。很抱歉造成混淆!我知道您是新手,因此,当您提出一个问题时,您尝试或发现的内容会显示出来,以便我们可以看到,您并不是在偷懒,让我们做所有的工作。因此,您在您的问题上获得了选票。