0
我在OCaml中编写了一个应该计算前100个响铃号码的程序。 这里是我的代码(我使用的是Num
模块):OCaml中的响铃号码
open Num
let one = num_of_int 1;;
let zero = num_of_int 0;;
计算阶乘:
let rec factorial n =
if n < 2
then one
else (num_of_int n) */ factorial(n-1)
计算牛顿:
let rec newton n k =
factorial n // (factorial k */ factorial (n-k))
let bell = Array.make 101 zero;;
bell.(0) <- one;;
bell.(1) <- one;;
let i = ref 2
let k = ref 0
let x = ref zero
let suma = ref zero
let n = ref 100
if !n != 0 || !n != 1 then
while !i <= !n do
while !k <= (!i-1) do
x := newton (!i-1) !k;
suma := !suma +/ (!x */ bell.(!k));
k := !k + 1
done;
bell.(int_of_num !k) <- (!suma);
suma:= zero;
k:=0;
i:= !i + 1;
done;;
bell.(int_of_num 20)
这是我在这第一个程序语言。编译它时遇到一些问题。
我认为你应该从阅读一些关于语法的教程开始,例如http://ocaml.org/learn/tutorials/。 – Kakadu
更具体地说,您可以将'while'循环重写为for循环。你总是增加整数变量,这就是为什么循环是你所需要的。 – Kakadu
另外,您应该更具体地指定您的问题,例如,通过提供错误日志。不要忘记'let .. = ..'作为顶级表达式最终不需要'in'。但是如果在另一个'let'中使用'let',你应该在cos#中添加'in'关键字 – Kakadu