我无法理解如何在 ocaml 中编写函数,因为我只编写了不需要用 分隔的多行的递归函数;
.
我正在尝试创建一个函数,给定一个整数 n 返回一个充满零且对角线上只有一个的矩阵,因此大小为 n 的单位矩阵。
我是函数式编程和 ocaml 的新手,所以我想知道是否可以以命令式方式编写它。
例如在 Java 中我会写:
public int[][] identity(int size) {
int[][] matrix;
matrix = new int[size][size];
//fill the matrix with zeroes
for( int i=0; i<size; i++){
for( int j=0; j<size; j++){
matrix[i][j] = 0;
}
}
//diagonal values at 1
for (int i=0; i<size; i++){
matrix[i][i] = 1;
}
return matrix;
}
我怎样才能在ocaml中实现这一点?
是的,您可以以命令式方式编写 OCaml 代码。 OCaml 有矩阵(表示为数组的数组),矩阵是可变的,并且它有一个for
陈述。因此,您可以编写与 Java 中编写的代码非常相似的代码。
然而,学习 OCaml 只是为了编写命令式代码,这似乎很遗憾!
以下是一些可以组合在一起的代码片段:
# let m = Array.make_matrix 3 3 0;;
val m : int array array = [|[|0; 0; 0|]; [|0; 0; 0|]; [|0; 0; 0|]|]
# m.(1).(1) <- 1;;
- : unit = ()
# m;;
- : int array array = [|[|0; 0; 0|]; [|0; 1; 0|]; [|0; 0; 0|]|]
# for i = 0 to 9 do Printf.printf " %d" i done;;
0 1 2 3 4 5 6 7 8 9- : unit = ()
OCaml 中的多行函数没有什么特别之处。这是一个执行三件事的函数。您可以将其写在一行或多行上:
let f x =
Printf.printf "I will now write the value of x\n";
Printf.printf "Here is the value of x: %d\n" x;
Printf.printf "I just wrote the value of x\n"
在 OCaml 中,;
习惯于separate应按顺序求值的表达式。即,没有;
在最后一个表达式之后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)