【问题标题】:Circular reference functions in OCamlOCaml 中的循环引用函数
【发布时间】:2020-10-18 20:27:42
【问题描述】:

假设我希望创建一个 OCaml 程序,该程序接受一个整数列表并创建第一项的总和,第二项的三倍,第三项的两倍,依此类推..

let rec doubler some_list =
  match some_list with
  | [] -> 0;
  | head::tail -> (head * 2) + (tripler tail);;
                               
let rec tripler some_list =
  match some_list with
  | [] -> 0;
  | head::tail -> (head * 3) + (doubler tail);;

let maths_stuff some_list =
  doubler some_list;;

let foo = maths_stuff [1;2;3;4;5;6] (* Should be 54 *)

目前我收到 Error: Unbound value tripler 错误,因为 OCaml 不知道它是什么,但我无法重新排序这两个函数,而不会遇到与 doubler 相同的问题。

在两个函数之间指定循环依赖的语法是什么?我在 Google 上发现的只是在构建过程中讨论模块之间的循环依赖关系,这不是我想要的。

许多 TIA

【问题讨论】:

    标签: ocaml circular-reference


    【解决方案1】:

    相互递归的项(值、类型、类、类类型、模块)需要用and分组:

    let rec doubler = function
      | [] -> 0;
      | head::tail -> head * 2 + tripler tail
                                  
    and tripler = function
      | [] -> 0;
      | head::tail -> head * 3 + doubler tail
    

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多