在ML中生成无限的Fibonacci序列列表

时间:2013-11-02 23:34:58

标签: sml ml

我必须生成一个包含Fibonacci序列的无限列表。我是ML的新手,所以我想检查一下是否正确。

-datatype 'a infist=NIL
=           | CONS of 'a * (unit -> 'a inflist);
- fun fib a b = CONS (a , fn()=> fib b (a+b));
val fib=fn: int->int-int inflist

这是什么叫做发电机功能? 当我给出a和b输入时,它会给我一个实际的输出,即无限的纤维序列吗?

1 个答案:

答案 0 :(得分:1)

您的数据类型定义和函数定义似乎正确无误。虽然我仍然倾向于不希望有任何参数的Fibonacci函数,以避免输入错误的可能性:

fun fibonacci () = 
   let
      fun fib(a,b) = Cons(a+b, fn() => fib(b,a+b))
   in
      Cons(0, fn()=> fib(0,1))
   end  

这就是我所说的a stream

当你调用它时,它会给出一个infislist类型的元素。您可以考虑编写一些其他函数来处理您的流并解释其内容。您可能希望在my another answer中看到一些相关示例,例如takeWhiletakefilterziptoList等函数。