SML中的无限序列
SML中的无限序列,sml,sequences,smlnj,ml,infinite-sequence,Sml,Sequences,Smlnj,Ml,Infinite Sequence,我必须编写一个函数,该函数接收一个序列(有限或无限),并返回一个相同的序列,唯一的区别是,如果在序列期间发生异常,则该函数将序列返回到其开头。 换句话说,函数必须返回一个循环序列,该序列在结束时重复自身。 我必须用句柄捕获异常。 下面的示例必须有效 listToSeq[1,2] val it=Cons(1,fn):内部序列 重新启动它 val it=Cons(1,fn):内部序列 跟踪它 val it=Cons(2,fn):内部序列 跟踪它 val it=Cons(1,fn):内部序列 跟踪它
我必须编写一个函数,该函数接收一个序列(有限或无限),并返回一个相同的序列,唯一的区别是,如果在序列期间发生异常,则该函数将序列返回到其开头。
换句话说,函数必须返回一个循环序列,该序列在结束时重复自身。 我必须用句柄捕获异常。
下面的示例必须有效
- listToSeq[1,2]
val it=Cons(1,fn):内部序列 - 重新启动它
val it=Cons(1,fn):内部序列 - 跟踪它
val it=Cons(2,fn):内部序列 - 跟踪它
val it=Cons(1,fn):内部序列 - 跟踪它
val it=Cons(2,fn):内部序列
有人能帮我吗?很简单。你有一大堆Cons(int,->Cons(int,…)的东西(看起来像),你想递归下去。观察和学习,并仔细思考。当你打电话给名单上下一次英语教学的fn时,你不想直截了当地打电话,而是要处理好每一次,如果必须的话,回到起点。所以,你先写fn。然后,你需要一个小伙子,他会把任何英语教学转换成新列表中的一个,带着调整后的下一个乐趣,让你回到起点。所以,你写下那个家伙(下面第三行)。最后,只需返回答案。简单来说,代码应该易于理解(伪代码;不会完全编译并且可能有haskelisms)
看起来很像家庭作业。那么你为什么不把它贴上这样的标签,并把原始的问题文本包括进去呢。无论如何,在我的脑海里,我可能会建议你保留这个列表和一个索引,你每次都会增加它,当你到达终点时会重置它。通过这种方式,您可以使用List.nth函数拉出元素。
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;