Ocaml匹配模式组合

Ocaml匹配模式组合,ocaml,Ocaml,我已经为此奋斗了一段时间了。我有一个匹配模式,可以是一个组合。例如,在下面的代码中: let processoperatorchange t2s proc op op2= let rec poc p = match p with | Zero -> "0" | In(chan, var, _, p, _) -> chan^"("^var^")"^op2^(poc p) | Out(chan, value, p, _) -> chan^"<

我已经为此奋斗了一段时间了。我有一个匹配模式,可以是一个组合。例如,在下面的代码中:

let  processoperatorchange t2s proc op op2=
  let rec poc p = match p with
    | Zero ->  "0"
    | In(chan, var, _, p, _) -> chan^"("^var^")"^op2^(poc p) 
    | Out(chan, value, p, _) -> chan^"<"^(v2s value)^">"^op^(poc p)

将Lhooq的评论提升为回答:


也许你应该添加一个构造函数
InOut
和一个构造函数
InTimer

我想你想要一个或多个模式:
|In(c,v,p,|)Out(c,v,p,|)->……
。请注意,在每种情况下,变量必须具有相同的类型,您的代码建议可能不是这种情况。谢谢,我以前尝试过这种方法,但由于我的变量不同,因此这种情况对我不起作用。谢谢你的这种想法,当你说它们可能发生在一个实例中时,你是什么意思?我的程序将从用户那里获取输入,并根据这些输入,评估匹配的情况。在某些情况下,用户可以组合两种情况,例如“In”和“Out”或“In”和“Timer”。变量p必须是“In”或“Out”。不可能两者都是,除非有一种类型将两者结合起来。
let  processoperatorchange t2s proc op op2=
  let rec poc p = match p with
    | Zero ->  "0"
    **| In(chan, var, _, p, _) && Out(chan, value, p, _) -> chan^("^var^")"^op2^(poc p)** 
    | Out(chan, value, p, _) -> chan^"<"^(v2s value)^">"^op^(poc p)