没有办法真正说出您想要实现的目标,因为您的代码中与 OCaml 语法的相似之处只是微不足道的。我想你从某个地方得到了你正在呈现的代码,所以也许它有助于找出原始语言是什么,因为它显然不是 OCaml。
尽管我不知道您到底想做什么,但我仍然可以尝试提供一些一般性提示。
第一:不要在 OCaml 中的参数周围使用括号。它们不是必需的,也不习惯使用。
let rec fac n = if n < 0 then 1 else n * (fac (n-1))
是阶乘函数的一个非常常见的定义。如您所见,使用的参数 n 没有任何括号。
第二:您似乎正在尝试进行一些模式匹配。虽然我不知道你使用的是什么语言,但看起来是这样的,因为代码风格类似于 haskell 中的模式匹配。
OCaml 中的模式匹配需要使用该match ... with
子句显式完成。这是使用您定义的数据的示例:
type logicexpr = Var of string
| Neg of logicexpr
| And of logicexpr * logicexpr
| Or of logicexpr * logicexpr
let rec distributeLeft x y =
match y with
And(e,f) -> And(distributeLeft(X,e),distributeLeft(X,f))
| Or(e,f) -> Or(distributeLeft(X,e),distributeLeft(Y,f))
(* ... *)
这只是正确语法的示例,所以不要使用它。您需要真正了解从某个地方获取的程序才能将其翻译成另一种语言。还要非常小心,如果你以 Haskell 程序为例,很多算法都会失败,因为它们通常需要特殊的语言特性,而这些特性不容易翻译。
所以首先弄清楚这个程序是如何工作的,然后了解语法,然后尝试翻译。如果您在执行此操作时卡在某个地方,请回来,也许有人能够更好地帮助您。