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