0
let rule1 m = 
    m = m/2;
    m

rule1(250)应该返回125而是返回250

如何返回参数的更新值?

4

2 回答 2

1

你确定m是可变的?该m = ..语句不会更新提供的参数。返回更新的值是一种选择吗?

let rule1 m = 
    m/2
于 2021-04-06T14:40:59.280 回答
0

如果您真的希望更改绑定的值,则该绑定必须是ref具有可变字段的 a 或记录类型(aref是使用方便的语法糖的一个具体示例。)

let m = ref 12 in
  (m := !m / 2;
   print_int !m;
   print_newline ())

但是,使用像这样的可变状态可能意味着您正在编写非惯用的 OCaml 代码,并且您缺少一些东西:或者更优雅的解决方案,或者在学习的情况下,算法课程的重点。

当然,或者通常两者兼而有之。我从个人经历说。

于 2021-04-06T15:45:02.153 回答