微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Ocaml 中的另一个函数中打印函数的返回值?

如何解决如何在 Ocaml 中的另一个函数中打印函数的返回值?

我有以下函数,如果它是偶数,则返回数字的一半。

let regraUm m = if ((m mod 2) = 0) then m/2 else m;;

并且我想在另一个函数内或 *.ml 文件内的某处打印 regraUm 250

示例:let _ = printf let m = regraUm 250

完整代码

open Printf
open Format
let regraUm m = if ((m mod 2) = 0) then m/2 else m;;

let _ = printf let m = regraUm 250

当我尝试使用 ocamlopt program.ml -o a 编译它时,它什么也不做。

解决方法

如果您运行像 ocamlformat 这样的自动格式化程序,您会发现它会将您的代码重新格式化为:

open Printf
open Format
let regraUm m = if ((m mod 2) = 0) then m/2 else m;;

let _ = printf;;

let m = regraUm 250;;

本质上,您将 _ 定义为 printf 的别名,然后定义一个常量 m

做您想做的事情的方法是将 m 传递给 printf,但您还需要一个格式字符串(请参阅 the documentation for Printf

open Printf
open Format

let regraUm m = if ((m mod 2) = 0) then m/2 else m;;

let m = regraUm 250;;

(* note that by putting () instead of the wildcard _ here,the compiler can warn
   you if you statement returns a valid that you're unintentionally ignoring *)
let () = printf "%d" m;;

您也可以使用 let ... in 语句或括号。

这将 m 定义在当前语句的范围内,而不是作为全局:

let () =
  let m = regraUm 250 in
  printf "%d" m;;

这直接传递值:

let () =
  printf "%d" (regraUm 250);;
,

我在我的环境中尝试了你的代码,我得到了这些输出: enter image description here 您没有正确使用 printf 函数,但我不明白为什么您没有任何编译器错误,如果我们命名它,似乎 ocaml 将您的代码行解释为 printf 函数。无论如何,请务必在此处查看文档:{​​{3}} 这里有你想要的

let m = regraUm 250 in printf "%d" m;;
(*or just*)
printf "%d" @@ regraUm 250;;
(*which is the same as*)
printf "%d"(regraUm 250);;


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。