我正在用OCaml实现一个Prolog解释器。我遇到的问题是在main函数中。本质上,我试图将我的解释器堆栈存储在一个函数调用中,并修改该堆栈的副本,然后将该副本从这个特定的函数调用传递给递归调用。当递归调用报告失败时,这个原始函数调用应该使用我保持不变的原始堆栈,并进行不同的递归调用(以实现回溯)。
现在,问题来了。当我只打算修改tempstack时,栈和临时栈(tempstack)都会被修改。我花了几个小时试图弄清楚这个问题,我很确定就是这个问题。下面是main函数的代码片段..
let rec main stack clauselist counter substitutions var