0

我必须生成一个包含斐波那契数列的无限列表。我是 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 输入时,它会给我一个实际的输出,即无限的 fib 序列吗?

4

1 回答 1

1

您的数据类型定义和函数定义似乎正确。虽然我仍然更喜欢不需要任何参数的斐波那契函数,以避免输入错误的可能性:

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

这就是我所说的流

当你调用它时,它会给出一个 infislist 类型的元素。您可以考虑编写一些其他函数来处理您的流并解释其内容。您可能想在我的另一个答案中看到一些这样的例子,例如,像takeWhile, take,和.filterziptoList

于 2013-11-03T07:32:55.010 回答