假设我正在编写一个OCaml程序,我的输入将是一个由空格分隔的大整数整数,即
let string = input_line stdin;;
Run Code Online (Sandbox Code Playgroud)
将返回一个看起来像例如"2 4 34 765 5 ..."的字符串.现在,程序本身将采用另外两个值i和j,它们指定此输入的小子序列,主程序将在该子序列上发生(让我们说主程序是找到这个子列表的最大值).换句话说,整个流将被输入到程序中,但程序将最终仅作用于输入的一小部分.
我的问题是:将输入流的相关部分转换为可用的东西(即一串整数)的最佳方法是什么?一种选择是将整个输入字符串转换为使用的int列表
let list = List.map int_of_string(Str.split (Str.regexp_string " ") string;;
Run Code Online (Sandbox Code Playgroud)
然后一旦输入了界限i和j,就可以轻松找到相关的子列表及其最大值.问题是大流的初始预处理非常耗时.
是否有一种直接从大流中定位小子列表的有效方法,即处理输入和主程序?