Syntax 当我不';不要使用双分号
我试图进入OCaml,但在编译代码时遇到了问题Syntax 当我不';不要使用双分号,syntax,ocaml,Syntax,Ocaml,我试图进入OCaml,但在编译代码时遇到了问题 let area_of_ring inner_radius outer_radius = let pi = acos (-1.) in let area_of_circle r = pi *. r *. r in area_of_circle outer_radius -. area_of_circle inner_radius Printf.printf "Area of ring: %f\n" (area_of_rin
let area_of_ring inner_radius outer_radius =
let pi = acos (-1.) in
let area_of_circle r = pi *. r *. r in
area_of_circle outer_radius -. area_of_circle inner_radius
Printf.printf "Area of ring: %f\n" (area_of_ring 1. 3.)
试图用ocamlc-o all.ml
编译该代码时出现以下错误:
File "all.ml", line 4, characters 35-49:
Error: This function has type float -> float
It is applied to too many arguments; maybe you forgot a `;'.
但是,如果我在顶层键入它或添加两个分号,代码就可以正常运行
# let area_of_ring inner_radius outer_radius =
let pi = acos (-1.) in
let area_of_circle r = pi *. r *. r in
area_of_circle outer_radius -. area_of_circle inner_radius;;
val area_of_ring : float -> float -> float = <fun>
# Printf.printf "Area of ring: %f\n" (area_of_ring 1. 3.);;
Area of ring: 25.132741
- : unit = ()
#让"环的面积"内"半径"外"半径=
设pi=acos(-1.)in
设_圆的面积r=pi*。r*。加入
圆外半径的面积-。圆内半径的面积;;
环的val区域:浮动->浮动->浮动=
#Printf.Printf“环的面积:%f\n”(环的面积1.3);;
圆环面积:25.132741
-:单位=()
有人能解释一下发生了什么事吗?这并不重要,但我希望能够在编写程序时处处不使用双分号。如果没有这两个分号,则有几个表达式彼此相邻。第一个是在函数
area\u of_ring
中调用area\u of_circle
,第二个是内半径
,第三个是Printf.Printf
,依此类推。由于编译器试图解释的原因,这没有意义
与许多语言一样,空格和换行符对OCaml语法没有意义。因此编译器将其视为一个大表达式
编写顶级表达式(如Printf.Printf
)的一个好习惯用法如下:
let () = Printf.printf "Area of ring: %f\n" (area_of_ring 1. 3.)
(这就是我编写代码的方式。)哦,如果没有说明打印行是一个新的表达式,或者类似的东西,编译器试图将其读入area of ring函数的下一行?太好了!这很有道理。第一次接触函数式语言,所以有点难以习惯非命令式的规则和语法。