Ocaml 中的表达式

Expressions in Ocaml

我想了解表达式在 Ocaml 中的工作原理。 例如,我有:

type expr =
 Int of int
 | Var of string
 | Sum of expr * expr
 | Diff of expr * expr
 | Mult of expr * expr
 | Div of expr * expr

如何识别元素是否为表达式?

我想 expr -> expr -> bool :

let subexpression express1 express2 =
 if express1 express1 then true else false 
  
 let E1 = 3 x 8 in
  let E2 = 5/6 in
   if subexpression E1 E2 then print_strin "true" else print_string "false"

我没有测试代码,因为这是我的想法,但实际上我不知道怎么写...

您需要明确询问的是 OCaml 中的一般表达式还是您在此处定义的 expr 类型的值。

因为 OCaml 是一种强类型语言,所以您不能拥有格式不正确的 expr 类型的值。所以没有有意义的函数来测试 expr 类型的东西是否是一个表达式。 (您可以定义一个始终 returns 为真的函数。)

另一方面,您提出的函数有 两个 表达式参数。这也没有多大意义。这两个参数的作用是什么?

你问题的其他部分表明你想确定一个表达式是否是另一个表达式的子表达式。那是完全不同的问题。

您可以通过递归处理不同的情况来查看 expr 类型的值。遍历此类值的函数的基本框架如下所示:

let myfunc expr =
    match expr with
    | Int n -> (* do something n, an int *)
    | Var s -> (* do something with s, a string *)
    | Sum (e1, e2) -> some_combination_of (myfunc e1) (myfunc e2)
    | Diff (e1, e2) -> some_combination_of (myfunc e1) (myfunc e2)
    | Mult (e1, e2) -> some_combination_of (myfunc e1) (myfunc e2)
    | Div (e1, e2) -> some_combination_of (myfunc e1) (myfunc e2)

很难说更多,因为你的问题很难理解,(坦率地说,看起来你还没有为此付出很多努力)。