在 OCAML 中乘以 int64 类型

Multipying int64 types in OCAML

我试图在 OCAML 中将两个 int 类型相乘,但我不确定我可能做错了什么

   let  prime        =   Int64.of_string("0x100000002b2") in
   let  temp         =   ref prime in
   hash := Int64.mul(!temp,prime);

我收到错误

Error: This expression has type 'a * 'b
       but an expression was expected of type int64

关于如何解决这个问题有什么建议吗?

更新:

我从 here

那里得到了这个方法的参考

我很好奇这是什么意思

val mul : int64 -> int64 -> int64
Multiplication.

我们怎么知道这个方法需要多少个参数?

OCaml 中的函数参数(在通常的习惯用法中)放在函数名称之后,没有括号和逗号。

# Int64.mul 8L 9L;;
- : int64 = 72L

逗号用于创建元组,但 Int64.mul 不接受元组。如上所述,它接受两个单独的参数。 (用 FP 的说法,这是一个柯里化函数。)

(通过有关 OCaml 的简短教程可能值得一试。您似乎假设它类似于传统的 C 系列语言,但它非常不同。)

更新

类型 x -> y 是接受类型 x 参数和 returns 类型 y 值的函数的类型。类型 x -> y -> z 是一个(柯里化)函数的类型,它接受两个类型为 xy 的参数,并且 returns 一个类型为 z 的值。 (这是一种稍微简化的看待事物的方式,但已经足够接近入门了。)

所以你引用的函数 mul 有两个 int64 类型的参数和 returns 一个 int64.

类型的值

(我重复我关于 OCaml 教程的建议。在深入编码之前学习 OCaml 类型系统真的很值得。)