我必须生成一个包含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输入时,它会给我一个实际的输出,即无限的纤维序列吗?
答案 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中看到一些相关示例,例如takeWhile
,take
,filter
,zip
和toList
等函数。