我对Ocaml比较陌生,我认为我对展开函数的理解是正确的,但我只是不知道如何使用它来生成fibonacci序列。我们不需要有最后两个值的holder变量才能找到当前的值吗?我们非常感谢所有的帮助。我正在添加下面的展开函数以供参考。
let rec unfold (f: 'seed -> ('a * 'seed)) (stop : 'b -> bool) (b :'seed) : 'a list =
if stop b then []
else
let x, b' = f b in
x :: (unfold f stop b')发布于 2017-10-31 01:23:15
您对存储最后两个值以创建下一个值的想法是正确的。诀窍是把它们储存在一个元组里。
生成器函数接受元组,返回第一个数字作为生成的值,并使用第二个元组数和下一个fibonacci数创建一个新的状态:
fun (a, b) -> (a, (b, a+b))停止函数只接受元组并决定何时停止。
fun (a, b) -> a > 1000第一个状态是(0, 1),这是前两个斐波那契数。
把所有东西放在一起:
# unfold (fun (a, b) -> (a, (b, a+b))) (fun (a, b) -> a > 1000) (0, 1);;
- : int list =
[0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55; 89; 144; 233; 377; 610; 987]https://stackoverflow.com/questions/47026495
复制相似问题