如何解决OCAML 功能无法正确打印
所以我必须创建一个“熄灯”游戏。我必须创建两个函数。一个功能“翻转”
val flip : bool array array -> int -> int -> bool array array =
给定一个布尔矩阵和两个整数 i,j。它否定了这些值 (true→false,false→true) 在矩阵中的位置 i,j,以及否定 (最多)4 个水平/垂直相邻元素上的值。
这是我的代码:
`
let matrixz = [|[|true;true;false;false|];
[|false;false;true;true|];
[|true;false;true;false|];
[|true;false;false;true|]|];;
let flip_matrix matrix a b=
let n=Array.length matrix in
for i=1 to n do
let n1=Array.length matrix in
for j=1 to n1 do
if i=a && j=b
then begin
matrix.(i).(j)<- not matrix.(i).(j);
matrix.(i+1).(j)<- not matrix.(i+1).(j);
matrix.(i).(j+1)<- not matrix.(i).(j+1);
matrix.(i).(j-1)<- not matrix.(i).(j-1);
matrix.(i-1).(j)<- not matrix.(i-1).(j);
end;
done;
done;
matrix;; `
我认为是正确的。但我也必须做另一个功能:
val print_matrix : bool array array -> unit =
给定一个布尔矩阵,它将它打印在屏幕上(真→“T”,假→“F”)。
这是我的代码:
let print_s matrix=
let n=Array.length matrix in
for i=0 to n-1 do
let n1=Array.length matrix in
for j=0 to n1-1 do
print_string matrix.(i).(j);
done;
print_string "/n";
done;
这将是正确的输出:
# flip matrix 1 4;;
# print_matrix matrix;;
FTFT
TFFF
FFTT
我知道第二个函数不正确。我非常感谢您的帮助和建议,因为我是 Ocaml 的新手。
解决方法
首先,您的代码将更容易确定其格式是否正确。空间很便宜,所以不要犹豫,使用它们。
let matrixz =
[|[|true; true; false; false|];
[|false; false; true; true|];
[|true; false; true; false|];
[|true; false; false; true|]|]
let flip_matrix matrix a b =
let n = Array.length matrix in
for i = 1 to n do
let n1 = Array.length matrix in
for j = 1 to n1 do
if i = a && j = b then
begin
matrix.(i).(j) <- not matrix.(i).(j);
matrix.(i + 1).(j) <- not matrix.(i+1).(j);
matrix.(i).(j + 1) <- not matrix.(i).(j + 1);
matrix.(i).(j - 1) <- not matrix.(i).(j - 1);
matrix.(i - 1).(j) <- not matrix.(i - 1).(j);
end;
done;
done;
matrix
这同样适用于您的 print_s
函数。
let print_s matrix =
let n = Array.length matrix in
for i = 0 to n - 1 do
let n1 = Array.length matrix in
for j = 0 to n1 - 1 do
print_string matrix.(i).(j);
done;
print_string "/n";
done
这行得通,但有两个问题。 print_string matrix.(i).(j)
期望 matrix.(i).(j)
是一个字符串,但它是一个布尔值。您必须将其转换为字符串。 OCaml 是非常强类型的,因此它不会为您隐式地进行这种转换。
第二个非常简单,当您弄清楚类型问题时。打印 /n
不会给你换行。打印 \n
将。
另外,你不妨研究一下Array模块中的iter
函数来实现打印。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。