这是我使用ocaml的第一天。到目前为止,我很享受它。我想知道是否有一种方法可以打印函数的结果。下面是一个基于Project Euler #5的示例。
我的代码是:
let rec gcd a b =
if b==0 then a
else (gcd b (a mod b));;
let rec myans n anssofar=
if n==1 then anssofar
else (myans (n-1) ((anssofar*(n-1))/(gcd anssofar (n-1))));;
Printf.printf "%d\n" (myans 20 20)
这可以很好地工作。然后我使用以下命令编译它:
$ ocamlc -o PE0005 PE0005.ml
然后使用以下命令运行它:
$ ./PE0005
然后它就会给出答案。
现在,假设我想要计算出myans 10 10。
Printf.printf "%d\n" (myans 10 10)
然后重新编译并重新运行。已经定义并编译了该函数。有没有什么方法可以不用重新编译就打印出答案呢?
欢迎任何提示和技巧。
发布于 2019-03-13 06:32:22
一种可能是在顶层( OCaml读取/求值/打印循环)中运行代码。这使您可以更轻松地进行实验。
$ ocaml
# #use "PE0005.ml";;
val gcd : int -> int -> int = <fun>
val myans : int -> int = <fun>
232792560
- : unit = ()
# myans 10 10;;
- : int = 2520
另一种可能是重写代码以从命令行获取参数。这就是您在实践中为编译的命令行程序所做的事情。
let main () =
if Array.length Sys.argv < 3 then (
Printf.eprintf "need two integer arguments\n";
exit 1
) else (
Printf.printf "%d\n"
(myans (int_of_string Sys.argv.(1)))
)
let () = main ()
下面是你运行它时的工作方式:
$ ocamlc -o PE0005 PE0005.ml
$ ./PE0005 20 20
232792560
$ ./PE0005 10 10
2520
发布于 2019-03-14 22:38:14
您可以使用sys.argv
获取命令行参数并在运行时传递这些值。
https://stackoverflow.com/questions/55131535
复制相似问题