我是ocaml绝对初学者,我正在为类编写一些代码,我遇到了这样一个问题:
datatype logicexpr = Var of string
| Neg of logicexpr
| And of logicexpr * logicexpr
| Or of logicexpr * logicexpr;
let rec distributeLeft(X, And(e,f)) = And(distributeLeft(X, e),distributeLeft(Y, f))
| Or(X, Y);;
为什么我在这里遇到语法错误?
3 回答
函数
distributeLeft
定义如下:可以在OCaml中翻译成:
等等 ...
没有办法真正告诉你要实现的目标,因为代码中与OCaml语法的相似之处只是远程的 . 我认为你从某个地方获得了代码,所以也许有助于找出原始语言是什么,因为它显然不是OCaml .
虽然我不知道,你想要做什么,我仍然可以尝试给出一些一般性的提示 .
第一:不要在OCaml中的参数周围使用括号 . 它们不是必需的,也不是通常使用的 .
是一个非常常见的阶乘函数定义 . 如您所见,使用参数n时没有任何括号 .
第二:看起来你正试图做一些模式匹配 . 虽然我不知道您使用的语言,但它似乎是这样,因为代码样式类似于haskell中的模式匹配 .
OCaml中的模式匹配需要使用
match ... with
子句显式完成 . 以下是使用您定义的数据的示例:这只是正确语法的一个示例,因此请不要使用它 . 您需要真正了解从某个地方获取的程序才能将其翻译成另一种语言 . 另外要非常小心,如果你采用Haskell程序,很多算法都会失败,因为它们通常需要特殊的语言功能,这些功能无法轻易翻译 .
首先弄清楚,该程序如何工作,然后了解语法,然后尝试翻译 . 如果你在这样做的时候卡在某个地方,那就回来吧也许有人能够更好地帮助你 .
它是OCaml中的操作员.2656148_ . 它's part of the pattern syntax. Since we don'知道你很难说的更多 . 也许你想使用"||"这是一个布尔运算符 . 或者也许你不可能're trying to do something with a pattern that' .