【发布时间】:2018-07-30 10:12:44
【问题描述】:
我正在尝试定义我的树并创建一个搜索功能,但我想我迷失在 SML 的语法中。这是我的树
datatype either = ImAString of string | ImAnInt of int;
datatype eitherTree = Empty
| eLEAF of either
| eINTERIOR of (either*eitherTree*eitherTree);
这是我的搜索功能
fun eitherSearch (eLEAF(v)) x = false
| eitherSearch (eINTERIOR(ImAnInt(v), lt, rt)) x =
if x < v then eitherSearch lt v
else if x > v then eitherSearch rt v
else true;
这就是我定义我的树的方式
val T2 = eINTERIOR(ImAnInt(4), eLEAF(ImAnInt(1), eLEAF(ImAnInt(2), Empty, Empty), Empty), eINTERIOR(ImAnInt(3), Empty, Empty));
这会返回
val T2 =
eINTERIOR
(ImAnInt 4,eINTERIOR (ImAnInt #,eINTERIOR #,Empty),
eINTERIOR (ImAnInt #,Empty,Empty)) : eitherTree
我猜这是不正确的,因为那些 # 符号没有意义。有没有更好的方法来定义树以便它在搜索功能中工作?当我定义像
这样的小树时val T1 = eINTERIOR(ImAnInt(5), eLEAF(ImAnInt(4)), eLEAF(ImAnInt(6)));
搜索功能正常工作,但在 T2 中,我认为我不了解如何编写多层树。
【问题讨论】:
-
你不是在问问题。
-
我的问题是为什么我的 T2 实现不能与 T1 的搜索功能一起使用。以及为什么 T2 在声明中有 #。我将对其进行编辑以使其更清晰@SimonShine
-
#s 是 SML/NJ 的副产品。请参阅Increasing the print depth in SML/NJ、Expanding # in sml 或 SMLNJ expand # in output -
你知道为什么我的T2在搜索功能中不能正常工作吗?它只能为树的头部读取 true,并且每个其他数字输入都会返回错误。 @SimonShine