コード内の OCaml 構文との類似性はごくわずかであるため、何を達成しようとしているのかを実際に伝える方法はありません。あなたが提示しているコードをどこかから入手したと思います。明らかにOCamlではないため、元の言語が何であったかを調べるのに役立つかもしれません。
あなたが何をしようとしているのか正確にはわかりませんが、それでもいくつかの一般的なヒントを与えることができます.
まず: OCaml では引数の周りに括弧を使用しないでください。それらは必要ではなく、通常は使用されません。
let rec fac n = if n < 0 then 1 else n * (fac (n-1))
階乗関数の非常に一般的な定義です。ご覧のとおり、パラメーター n は括弧なしで使用されています。
2 番目: パターン マッチングを実行しようとしているようです。コードスタイルがhaskellのパターンマッチングに似ているため、使用している言語はわかりませんが、このように見えます。
match ... with
OCaml でのパターン マッチングは、句を使用して明示的に行う必要があります。定義したデータを使用した例を次に示します。
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 プログラムを例にとると、多くのアルゴリズムが失敗する可能性があります。これは、簡単に翻訳できない特別な言語機能が必要になることが多いためです。
したがって、まずこのプログラムがどのように機能するかを理解してから、構文を理解してから翻訳を試みてください。これを行っているときにどこかで行き詰まった場合は、戻ってきてください。誰かがあなたをよりよく助けることができるかもしれません.