Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OCAML函数没有';无法正确打印_Ocaml_Imperative - Fatal编程技术网

OCAML函数没有';无法正确打印

OCAML函数没有';无法正确打印,ocaml,imperative,Ocaml,Imperative,所以我必须创建一个“熄灯”游戏。我必须创建两个函数。单功能“翻转” 瓦尔翻转:布尔数组->整数->整数->布尔数组= 给定一个布尔矩阵和两个整数i,j。它否定了这些值 (对)→假,假→真)在矩阵中的位置i,j处,以及求反 (最多)4个水平/垂直相邻元素上的值 这是我的代码: let print_s matrix= let n=Array.length matrix in for i=0 to n-1 do let n1=Array.length matrix in

所以我必须创建一个“熄灯”游戏。我必须创建两个函数。单功能“翻转”

瓦尔翻转:布尔数组->整数->整数->布尔数组=

给定一个布尔矩阵和两个整数i,j。它否定了这些值 (对)→假,假→真)在矩阵中的位置i,j处,以及求反 (最多)4个水平/垂直相邻元素上的值

这是我的代码:

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
这是可行的,但有两个问题<代码>打印字符串矩阵。(i)。(j)期望
矩阵。(i)。(j)
是字符串,但它是布尔值。您必须将其转换为字符串。OCaml是非常强类型的,因此它不会隐式地为您进行这种转换

第二个很简单,当你解决了类型问题时。打印
/n
不会给您换行符。打印
\n
将失败

此外,您可能希望研究阵列模块中的
iter
功能以实现打印

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
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