Functional programming 标准ML:修改二叉树的深度函数

Functional programming 标准ML:修改二叉树的深度函数,functional-programming,sml,Functional Programming,Sml,我得到了一个二叉树的深度函数,如下所示: fun depth Empty = 0 | depth(Node(t_1, _ t_2)) = max(depth t_1, depth t_2) + 1; 假设我想修改这个深度函数,使单个节点的深度为0(实际上,单个节点的深度为1)。我该怎么做呢 我在想: fun depth Empty = 0 | depth(Node(Empty, _, Empty)) = 0 | depth(Node(t_1, _, t_2)) = ma

我得到了一个二叉树的深度函数,如下所示:

fun depth Empty = 0
    | depth(Node(t_1, _ t_2)) = max(depth t_1, depth t_2) + 1;
假设我想修改这个深度函数,使单个节点的深度为0(实际上,单个节点的深度为1)。我该怎么做呢

我在想:

fun depth Empty = 0
    | depth(Node(Empty, _, Empty)) = 0
    | depth(Node(t_1, _, t_2)) = max(depth t_1, depth t_2) + 1;
这个看起来对吗

谢谢


b外行

这很接近,但并不完全正确<代码>深度(节点(节点(空,1,空),2,空)将在左侧子树上递归,这是一个单节点,因此它将返回
0
。然后它将在右侧递归,这是空的,返回0。然后,您将取最大值0和0,返回1,这可能不是您想要的。相反,您必须匹配空的大小写和单例大小写,就像您所做的那样,并且对于默认情况,您需要调用原始版本,该版本对单个节点返回1。

原始版本=我第一次给出的函数?我可以不编写单独的函数就这样做吗?是的,原始版本指的是您给出的第一个函数。我能想到的唯一方法是添加一个额外的布尔参数确定您是否已经执行了迭代的度量值。如果以单节点情况结束,且布尔值为false,则返回0,否则返回1。在任何一种情况下,都存在一种令人尴尬的不对称性。