使用“传递ocaml中的多个语句”;在;及;及;操作 我想把这个C++代码转换成OCAM,但是我得到了语法错误
C++代码使用“传递ocaml中的多个语句”;在;及;及;操作 我想把这个C++代码转换成OCAM,但是我得到了语法错误,ocaml,ocamlbuild,Ocaml,Ocamlbuild,C++代码 int** matrix(int n,int **a,int**b) { t=n/2; a11=new int*[t]; for(i=0;i<t;i++) a11[i]=new int [t]; for(i=0;i<t;i++) for(j=0;j<t;j++) a11[i][j]=a[i][j]; a12=new int*[t]; for(i=0;i<t;i++) a12[i]=new int [t]; for(i=
int** matrix(int n,int **a,int**b)
{
t=n/2;
a11=new int*[t];
for(i=0;i<t;i++)
a11[i]=new int [t];
for(i=0;i<t;i++)
for(j=0;j<t;j++)
a11[i][j]=a[i][j];
a12=new int*[t];
for(i=0;i<t;i++)
a12[i]=new int [t];
for(i=0;i<t;i++)
for(j=0;j<t;j++)
a12[i][j]=a[i][j+t];
a21=new int*[t];
for(i=0;i<t;i++)
a21[i]=new int [t];
for(i=0;i<t;i++)
for(j=0;j<t;j++)
a21[i][j]=a[i+t][j];
}
int**矩阵(int n,int**a,int**b)
{
t=n/2;
a11=新整数*[t];
对于(i=0;ilet的和不能出现在let的主体中。相反,请使用多个let:
let matrix n x y =
let t = n/2 in
let a11 = Array.make_matrix t t 0 in
for i = 0 to t-1 do
for j = 0 to t-1 do
a11.(i).(j) <- x.(i).(j)
done
done;
let a12 = Array.make_matrix t t 0 in
for i = 0 to t-1 do
for j = 0 to t-1 do
a12.(i).(j) <- x.(i).(j+t)
done
done;
let a21 = Array.make_matrix t t 0 in
for i = 0 to t-1 do
for j = 0 to t-1 do
a21.(i).(j) <- x.(i+t).(j)
done
done
让矩阵nxy=
设t=n/2英寸
设a11=Array.make_矩阵t0 in
对于i=0到t-1 do
对于j=0到t-1 do
a11.(i)。(j)为了澄清,以下代码与原始代码有相同的问题:
# let x = 4 in () and y = 7 in ();;
Error: Syntax error
由于let
定义了一个表达式,这相当于编写()和()
,这实际上是不合法的OCaml
let…和
的正确用法如下所示:
# let x = 4 and y = 7 in ();;
Warning 26: unused variable x.
Warning 26: unused variable y.
- : unit = ()
有几个let…和let…
但是在中只有一个而不是有三个独立的用于循环,一个人也可以先做三个矩阵,然后在同一个循环中初始化它们。是的,或者你可以有一个内部函数,它取一个偏移量来添加到i
和j
不过,因素并不是OP的问题……谢谢@gsg的支持explanation@gsg你的第一句话不正确,let x=(y+z中的y=1和z=2)
在ocaml中是正确的。但是我同意你的说法。@Sheeft:这是不同的let
的和(并且不在let
的主体中)。
# let x = 4 and y = 7 in ();;
Warning 26: unused variable x.
Warning 26: unused variable y.
- : unit = ()