0


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

  • 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

有人能帮我吗 ?

4

1 回答 1

1

简单的。你有一堆 Cons(int, ->Cons(int, ...)) 东西(看起来像),你想向下递归。观看和学习,并仔细考虑。当您调用在列表中生成下一个 elt 的 fn 时,您不想直接调用它,而是每次都处理,如果必须,请返回开始。所以,你先写那个 fn。然后,您想要一个可以将任何 elt 转换为新列表中的 elt 的小伙子,并带有调整后的下一个乐趣,让您重新开始。所以,你接下来写那个人(下面的第三行)。最后,只需返回答案。简单,代码应该易于理解(伪代码;不会完全编译并且可能有问题)。

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;
于 2011-08-30T13:14:18.533 回答