OCaml 中的循环引用函数

Circular reference functions in OCaml

假设我想创建一个 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

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

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