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