Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SML中的无限序列_Sml_Sequences_Smlnj_Ml_Infinite Sequence - Fatal编程技术网

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;