SML中的无限序列

时间:2011-05-22 20:45:28

标签: sml sequences smlnj ml infinite-sequence


我必须编写一个接收序列(有限或无限)的函数并返回一个相同的序列,唯一的区别是如果在序列期间发生异常,则函数将序列返回到它的开头。
换句话说,该函数必须返回循环序列,该循环序列在结束时重复自身。 我必须用句柄来捕捉异常 以下示例必须正常工作。

  • listToSeq [1,2];
    val it = Cons(1,fn):int seq
  • restartOnError它;
    val it = Cons(1,fn):int seq
  • 尾巴;
    val it = Cons(2,fn):int seq
  • 尾巴;
    val it = Cons(1,fn):int seq
  • 尾巴;
    val it = Cons(2,fn):int seq

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

简单。你有一个Cons(int, - > Cons(int,...))的东西(它看起来像),你想要递减。观察和学习,并思考它。当你调用列表中的下一个elt的fn时,你不想直接调用它,而是每次都要调用它,如果必须的话,回到开始。所以,你先写下fn。然后,你想要一个将把任何elt转换成新列表中的一个的小伙伴,调整下一个乐趣,让你重新开始。所以,你接下来写下那个人(下面的第三行)。最后,回答问题。简单,代码应该很容易遵循(伪代码;不会完全编译,可能有haskelisms)。

fun cycle l =
    let fun handleNext next = ((next()) handle whatever => l);
        fun next (Cons(n, fn)) = Cons(n, fun ()=>next(handleNext fn))
    in next l end;