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 -oa 编译它时,它什么也不做。
解决方案
如果您运行类似的自动格式化程序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
,但你还需要一个格式字符串(参见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);;
推荐阅读
- c++ - TAzureBlobService->GetBlob 在大文件上失败
- linux - 如何在 execve 子进程中继承 NSPR 上下文?
- node.js - windows下Phonegap安装问题
- html - 居中的弹性父母的前几个孩子没有出现在屏幕上
- uwp - 构建与 google drive api 相关的 UWP 时出现 ILT0005 错误
- c - 以字节为单位列出优化的二进制函数大小
- nginx - Nginx:如何让一个 server_name 服务于各种端口
- arrays - 打印数组和最大重复元素
- python - 当我的代码在 AWS EC2 上运行时,我怎样才能使 .env 运行良好?
- android - 如何在 recyclerview 适配器中填充这些数据?