首页 > 解决方案 > 如何在 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 -oa 编译它时,它什么也不做。

标签: ocaml

解决方案


如果您运行类似的自动格式化程序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

做你想做的事情的方法是传递mprintf,但你还需要一个格式字符串(参见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);;

推荐阅读