如何在OCaml中定义两个相互引用的类型?

lka*_*htz 3 recursion ocaml types

下面的代码将报告语法错误消息:

type 'a edge = 
  |Empty 
  |End of 'a * 'a vertex * 'a vertex and
type 'a vertex = 
  |Empty
  |Vertex of 'a * 'a edge list;;
Run Code Online (Sandbox Code Playgroud)

如何定义两种相互引用的类型?

Raf*_*ler 6

第二个type在语法上不正确:

type 'a edge = 
  |Empty 
  |End of 'a * 'a vertex * 'a vertex
and 'a vertex = 
  |Empty
  |Vertex of 'a * 'a edge list;;
Run Code Online (Sandbox Code Playgroud)

  • (关键是需要使用and来定义相互递归的类型。) (2认同)