【问题标题】:Ocaml match pattern combinationOcaml 匹配模式组合
【发布时间】:2017-07-26 11:29:59
【问题描述】:

我已经为此苦苦挣扎了一段时间。我有一个可能是组合的匹配模式。比如下面的代码:

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)

InOut 可能出现在一个实例中。有什么办法可以说

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)

【问题讨论】:

  • 我认为你想要或模式:| In(c, v, _, p, _) | Out(c, v, p, _) -&gt; ...。请注意,变量在每种情况下都必须具有相同的类型,您的代码建议可能并非如此。
  • 谢谢,我之前试过这个,但由于我的变量不同,这个条件对我不起作用。不过谢谢你
  • 你说它们可能在一个实例中发生是什么意思?
  • 我的程序将从用户那里获取输入,并根据这些输入来评估匹配的情况。在某些情况下,用户可以结合两种情况,例如“In”和“Out”或“In”和“Timer”。
  • 变量 p 必须是“In”或“Out”。不能两者兼有,除非有一种结合了两者的类型。

标签: ocaml


【解决方案1】:

将 Lhooq 的评论提升为答案:

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

【讨论】: