验证预订单列表的最佳ocaml方式可以从BST获得

时间:2016-04-08 20:24:24

标签: ocaml

鉴于数字列表,我需要验证此列表是任何现有BST的有效预订。例如,1,2,3是一个有效的预订单列表,但是3 4 2是无效的。

在Java中,我将尝试实现这样的函数签名 bool isvalid(int[] list, int start_index, int[] cur_index) 然后逻辑就像检查左树有效,然后检查右子树是否有效。 并且cur_index将存储左树消耗了多少列表元素的信息,因此我可以从索引cur_index [0] + 1中检查右子树。

然而,在Ocaml,我被告知不建议引入这个"通过引用打电话"函数调用中的参数。那么攻击这类问题的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

通常,在整个纯函数计算中维护状态的方法是将状态作为参数传递,并使每个函数返回可能更新的状态。你可以做到这一点,但它将涉及大量的阵列复制。

但是,在我看来,您希望以流媒体方式处理您的列表;也就是说,你想只穿过它一次。因此,子树大小似乎并不特别有用。它只是告诉你要跳过多少列表;即,第二次穿越。

返回列表中未处理的剩余部分似乎更有用,就好像这是一个解析问题。 (我希望不要放弃太多。)