Arrays 在数组中记录用户';输入ocaml,循环的语法错误

Arrays 在数组中记录用户';输入ocaml,循环的语法错误,arrays,ocaml,Arrays,Ocaml,我试图在数组中记录用户的输入 但它在告诉我: line 5, characters 0-3: Error: Syntax error 我不明白为什么,因为的语法似乎还可以 下面是代码: let n = read_int() let ar_of_int = Array.make n 0 for i = 0 to n - 1 do let b = read_int () ar_of_int.(i) <- b done let n=read_int() 设ar_of_int=

我试图在数组中记录用户的输入 但它在告诉我:

line 5, characters 0-3:
Error: Syntax error
我不明白为什么,因为的
语法似乎还可以
下面是代码:

let n = read_int()

let ar_of_int = Array.make n 0

for i = 0 to n - 1 do
   let b = read_int ()
   ar_of_int.(i) <- b
done
let n=read_int()
设ar_of_int=Array.make n 0
对于i=0到n-1 do
设b=读取整()

let
的绑定部分之后,中缺少一个

for i = 0 to n - 1 do
   let b = read_int ()
   in ar_of_int.(i) <- b
done
。。。如果您使用resp加载或编译它
ocaml
ocamlc
,在
附近有一个语法错误,因为它前面没有
输入顶级表达式时:

在顶层之外,使用;;充其量是很少发生的 写得好的代码永远不需要。简而言之,双分号;; 可用于以下三个原因:

  • 与顶层兼容
  • 拆分代码以便于调试
  • 引入顶级表达式

但是,使用
,您应改为使用:

let n = read_int ()
let ar_of_int = Array.make n 0
let _ =
  for i = 0 to (n - 1) do
    ar_of_int.(i) <- read_int ()
  done
这是因为每个指令都是在
;;时计算的
被读取,
read\u int
想要读取一个整数,但输入流包含程序的其余部分。因此它得到一个
l
(从下一个
let
),并抱怨输入错误。

函数编程中没有“全局”变量,或者至少是Ocaml。在命令式语言中,这样的语句是正常的

let n = read_int()
let p = n + 1
因为
=
是一个赋值,即存储全局状态。在Ocaml中,
=
是一个绑定。在函数式编程中,有界值在超出范围时失效

n
ar\u of_int
可以是子作用域的“全局”

let _ = 
   let n = read_int() 
   and ar_of_int = Array.make n 0 in

       for i = 0 to n - 1 do
           let b = read_int ()
           ar_of_int.(i) <- b
       done;

       if Array.length ar_of_int > 0 then
           print_int ar_of_int.(0);

           let an_int = !ar_of_int.(0) in 
               let plus_one = an_int + 1 in
                   print_int plus_one

  (** `n` doesn't exist here *)
  (** print_int n *)
let=
设n=read_int()
和ar_of_int=Array.make n 0 in
对于i=0到n-1 do
设b=读取整()
那么,ar_of_int.(i)0
打印整数(0)的整数;
让一个_int=!整(0)英寸的应收账款
设加一=一个整数+1英寸
打印整数加一
(***`n`在这里不存在*)
(**打印内容*)
请注意,
函数不需要返回值。整个函数本身就是一个表达式


您可以创建一个模块级变量和类,并像使用全局值一样使用它们。

语法是
let。。。在
中,为什么编译器不接受int或n的ar_作为全局变量?@jijojh在Ocaml中没有“全局”变量。好的,现在就好了,如果我把它放在任何工作的地方。我不明白的是,in,意味着局部变量,但为什么编译器不接受全局变量?谢谢,但请注意,你所说的不起作用,我必须用int和n个局部变量的ar_来实现代码。所以,这意味着在这段代码之后我不能对我的数组做任何事情,因为它是本地的,因此我不明白为什么我不能使它成为全局的。。。
let n = read_int ();;

let ar_of_int = Array.make n 0 ;;

for i = 0 to (n - 1) do
  ar_of_int.(i) <- read_int ()
done
let n = read_int()
let p = n + 1
let _ = 
   let n = read_int() 
   and ar_of_int = Array.make n 0 in

       for i = 0 to n - 1 do
           let b = read_int ()
           ar_of_int.(i) <- b
       done;

       if Array.length ar_of_int > 0 then
           print_int ar_of_int.(0);

           let an_int = !ar_of_int.(0) in 
               let plus_one = an_int + 1 in
                   print_int plus_one

  (** `n` doesn't exist here *)
  (** print_int n *)