我想写这个简单的代码:
let rec gcd a b =
if b = 0 then a else gcd b (a mod b);;
val gcd : int -> int -> int = <fun>
Printf.printf "%d da \n" gcd 55 200 ;;
这是代码,我得到的错误是:
File "tst.ml", line 3, characters 0-3:
Error: Syntax error
而且,任何人都可以向我解释什么是“int - &gt; int - &gt; int =”所有关于?我知道它必须是函数的参数和返回值,但是什么以及如何? :)
答案 0 :(得分:4)
您将gcd
55
和200
作为printf
的单独参数传递。所以,试试这个:
Printf.printf "%d da\n" (gcd 55 200);;
答案 1 :(得分:4)
看起来你做了一些副本&amp;从ocaml交互式会话粘贴,因为通常我们不会混淆函数定义(2个第一行)和函数声明(第三行,但在这种情况下,它看起来更像是提供的ocaml解释器的答案定义 - 因为<fun>
部分在程序中没有语法正确,但解释器使用它来表明它发现该值是 fun ction)在同一范围内。
所以,你不应该包括第三行,你必须修复最后一条指令,正如@JeffreyScofield所解释的那样。
(* gcd function definition *)
let rec gcd a b =
if b = 0 then a else gcd b (a mod b);;
(* val gcd: int -> int -> int *)
Printf.printf "%d da \n" (gcd 55 200);;
或者,可以写下最后一行:
Printf.printf "%d da \n" @@ gcd 55 200;;
错误包含的函数签名表示gcd
采用2个整数参数的序列,并返回一个整数。该符号被称为curry形式:传递给函数 A 的每个参数产生另一个 B 函数,期望 A 的其余参数。因此,您可以通过以下几种方式阅读该签名:
作为一个取2个整数并返回一个的函数,
val gcd: int -> int -> int
作为一个取整数的函数,并返回一个函数,该函数取整数并返回一个整数。
val gcd: int -> (int -> int)
这两种符号都是等价的(箭头&#34;运算符&#34;据说在右边是关联的),但第二种符号有助于理解函数返回的概念&#34;链接&#34;。 / p>
答案 2 :(得分:0)