使用 "in" 和 "and" 操作在 ocaml 中传递多个语句
passing multiple statements in ocaml using "in" and "and" operations
我想将此 C++ 代码转换为 ocaml,但出现语法错误
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=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];
}
Ocaml 代码
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
and
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
and
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
;;
问题是 t 的值没有在 a12 和 a21 数组中传递,而是变得无界。
let
的 and
不能出现在 let 的正文中。相反,使用多个 lets:
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
澄清一下,以下问题与您的原始代码相同:
# let x = 4 in () and y = 7 in ();;
Error: Syntax error
由于let
定义了一个表达式,这相当于写() and ()
,这确实是不合法的OCaml。
let ... and
的正确用法是这样的:
# let x = 4 and y = 7 in ();;
Warning 26: unused variable x.
Warning 26: unused variable y.
- : unit = ()
有几个 let ... and let ...
但只有 一个 in
.
我想将此 C++ 代码转换为 ocaml,但出现语法错误
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=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];
}
Ocaml 代码
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
and
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
and
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
;;
问题是 t 的值没有在 a12 和 a21 数组中传递,而是变得无界。
let
的 and
不能出现在 let 的正文中。相反,使用多个 lets:
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
澄清一下,以下问题与您的原始代码相同:
# let x = 4 in () and y = 7 in ();;
Error: Syntax error
由于let
定义了一个表达式,这相当于写() and ()
,这确实是不合法的OCaml。
let ... and
的正确用法是这样的:
# let x = 4 and y = 7 in ();;
Warning 26: unused variable x.
Warning 26: unused variable y.
- : unit = ()
有几个 let ... and let ...
但只有 一个 in
.