2015-09-20 38 views
0
Multipying的Int64类型

我试图在OCAML乘两个int类型的,我不知道什么我可能是做错了在OCAML

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. 

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

+0

释放你自己和C/Java的:你不需要括号OCaml中的作用调用。只要写“Int64.mul a b”而不是“Int64.mul(a,b)”。 – lambdapower

回答

1

OCaml中的函数参数(通常用法)放在函数的名称后面,不带圆括号和逗号。

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

逗号用于创建元组,但Int64.mul不接受元组。它接受如上所述的两个独立参数。 (在FP的说法,这是一个咖喱功能。)

(这可能是值得通过对OCaml的一个简短的教程工作。你似乎是假设它就像传统的C家族语言,但它是相当不同的。)

更新

类型x -> y是接受x类型的参数,并返回y类型的值的函数的类型。 x -> y -> z类型是一个(curried)函数的类型,它使用xy类型的两个参数,并返回类型为z的值。 (这是看待事物的略微简化的方式,但足够接近上手。)

所以,你举的功能mul采用int64类型的两个参数,并返回int64类型的值。

(。我重复我的建议有关的OCaml的教程它真的值得学习一下变得过于深入编码之前OCaml的类型系统)

+0

谢谢你做的窍门,你也可以请回答我更新的问题。我不确定关于文档 –

+0

它确实如此。这与C非常不同。我正在关注各种在线资源。 –

+0

这不仅是C语言家族。例如,标准ML中调用函数的语法与OCaml中的调用函数的语法相同。但是Standard ML中的大多数标准库函数都是不安全的(它们需要一个元组),对于这些函数,OP的用法是正确的。他们本可以写成咖啡;他们不是。所以图书馆使用的惯例也是一个因素。 – newacct