问题描述
我想将 2-3-4 树分解为小节点。
这些是我正在使用的类型:
type ele = int
type color = Red|Black
type ab = Vide | Node of ( ele * color * ab * ab *ab)
type ab234 = Vide
|Node_1 of (ele * ab234* ab234)
|Node_2 of(ele * ele * ab234 *ab234 *ab234) ``
|Node_3 of(ele * ele * ele *ab234 * ab234* ab234 *ab234)
我的映射基于此:
我需要帮助进行转型。我试过这个功能,但它似乎不起作用,它确实分解了根,但它不会继续到分支:
let rec eclat = function
| Vide -> Vide
| Node_3(r,x,y,ag,mg,md,ad) -> eclat ( Node_1(x,(Node_1(r,mg)),Node_1(y,ad)))
| Node_2(r,ml,ad) -> eclat(Node_1(r,(Node_1(x,ml)),ad))
| _ -> failwith("zebi") ;;
解决方法
如果我输入您现在拥有的 eclat
函数,我会得到:
提示:如果这是一个递归定义,您应该在第 1 行添加 'rec' 关键字
所以这是一个问题。
我还注意到您将 ab
更改为 ab234
,但您没有更改类型内部的外观。所以ab234
类型的内容都定义为ab
类型。这似乎不正确。