可以通过sml关键字在and中定义相互依赖的数据类型。现在,我有两个互相引用的结构,看来我看到的错误是因为它们是相互递归的,但是我看不到有可能以这种方式添加and的方法。

例:

structure Machine = struct
  structure F = Frame
  ...
end

structure Frame = struct
  ...
  reference to Machine.wordsize
end


是否可以使其起作用或设计与sml不兼容?我正在从Ocaml移植代码,显然这可以在这里工作。

最佳答案

似乎不可能。我找到了答案here

第1.2.0节Q: [Allyn Dimock] Recursive modules中第二个问题的答案


许多人要求一种定义相互递归的方法
结构(例如,命令的相互递归抽象语法和
表达式,每个都在自己的模块中)。尽管可以这样做
相互递归模块集几乎肯定是
作为一个单独的编译单元进行编译,因此它们将不是真正的
“独立”模块。但是,递归定义涉及
仿函数的应用似乎要困难得多,并且相互之间
递归函子将更加令人难以置信。

10-06 10:29