首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编译后打印ocaml函数

编译后打印ocaml函数
EN

Stack Overflow用户
提问于 2019-03-13 06:26:03
回答 2查看 49关注 0票数 0

这是我使用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)

然后重新编译并重新运行。已经定义并编译了该函数。有没有什么方法可以不用重新编译就打印出答案呢?

欢迎任何提示和技巧。

EN

回答 2

Stack Overflow用户

发布于 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
票数 4
EN

Stack Overflow用户

发布于 2019-03-14 22:38:14

您可以使用sys.argv获取命令行参数并在运行时传递这些值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55131535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档