Sml 如何在标准ML中编写BST搜索函数?
需要编写一个类型为“a tree->”(“a*”a->bool)->“a->bool”的函数searchBST 在nst中搜索给定数据元素的。使用:Sml 如何在标准ML中编写BST搜索函数?,sml,Sml,需要编写一个类型为“a tree->”(“a*”a->bool)->“a->bool”的函数searchBST 在nst中搜索给定数据元素的。使用: datatype 'data tree = Empty | Node of 'data tree * 'data * 'data tree 此外,我们不能搜索树中的每个节点,而只能搜索那些根据定义可能包含我们正在查找的元素的节点 我编写的函数是(int*int-tree->bool)类型,如果您能提供将其
datatype 'data tree = Empty
| Node of 'data tree * 'data * 'data tree
此外,我们不能搜索树中的每个节点,而只能搜索那些根据定义可能包含我们正在查找的元素的节点
我编写的函数是(int*int-tree->bool)
类型,如果您能提供将其转换为所需类型的提示,我将不胜感激
datatype 'data tree = Empty
| Node of 'data tree * 'data * 'data tree;
fun searchBST (x, Empty) = false
| searchBST (x, Node(l, parent, r)) =
if x = parent then true
else
if x< parent then searchBST(x, l)
else searchBST(x,r)
datatype'数据树=空
|“数据树*”数据*数据树的节点;
fun searchBST(x,空)=false
|searchBST(x,节点(l,父节点,r))=
如果x=父级,则为真
其他的
如果x
您的代码中缺少这一部分“(“a*”a->bool)”考虑到这一点,对元组进行处理,那么您的代码就可以工作了。两个“a”是您搜索的元素和节点中的元素 您的代码中缺少这一部分“('a*'a->bool)”考虑到这一点,对元组进行处理后,您的代码就可以工作了。两个“a”是您搜索的元素和节点中的元素 当某物的类型为“a*”a->bool
时,它总是(99,9%的时候)一个谓词函数。参数tuple“a*”a
是一种相等类型(因此是双标记,而不是单个标记为“正常”)这一事实强烈地暗示了这一点
因为您正在构造一个搜索函数,所以您的谓词函数很可能就是应该用来定义要搜索的元素的函数。
然而,它也可能定义了所需元素是在树的左侧还是右侧。虽然通常情况下,它会是一个排序函数,类型为'a*'a->order
。这样的排序函数在任何实际情况下都会更好,因为这样您就能够抽象元素的排序(包括相等),而不是硬编码一个小于,这将迫使您的函数只处理整数(除非您键入annotate到其他一些数字类型,如reals)而不是“a
(相等)值
因此,您不想(获得所需类型)的是以下形式:
fun searchBST t p x =
其中,t
是树,p
是您的谓词函数,x
是您无法找到的值。基本上,您缺少的是在测试中使用谓词函数,而不是直接执行它
fun searchBST Empty _ _ = false
| searchBST (Node(l, d, r)) p x =
case (p(x, d), x < d) of
(true, _) => true
| (_, true) => searchBST l p x
| (_, false) => searchBST r p x
fun searchBST Empty\u0=false
|searchBST(节点(l,d,r))px=
1例(p(x,d),x正确
|(u,true)=>searchBST l p x
|(u,false)=>searchBST r p x
当某个对象的类型为''a*''a->bool
时,它总是(99,9%的时候)一个谓词函数。参数tuple“a*”a
是一种相等类型(因此是双标记,而不是单个标记为“正常”)这一事实强烈地暗示了这一点
因为您正在构造一个搜索函数,所以您的谓词函数很可能就是应该用来定义要搜索的元素的函数。
然而,它也可能定义了所需元素是在树的左侧还是右侧。虽然通常情况下,它会是一个排序函数,类型为'a*'a->order
。这样的排序函数在任何实际情况下都会更好,因为这样您就能够抽象元素的排序(包括相等),而不是硬编码一个小于,这将迫使您的函数只处理整数(除非您键入annotate到其他一些数字类型,如reals)而不是“a
(相等)值
因此,您不想(获得所需类型)的是以下形式:
fun searchBST t p x =
其中,t
是树,p
是您的谓词函数,x
是您无法找到的值。基本上,您缺少的是在测试中使用谓词函数,而不是直接执行它
fun searchBST Empty _ _ = false
| searchBST (Node(l, d, r)) p x =
case (p(x, d), x < d) of
(true, _) => true
| (_, true) => searchBST l p x
| (_, false) => searchBST r p x
fun searchBST Empty\u0=false
|searchBST(节点(l,d,r))px=
1例(p(x,d),x正确
|(u,true)=>searchBST l p x
|(u,false)=>searchBST r p x
这大概是家庭作业。你应该使用家庭作业标签。大概,这是家庭作业。你应该使用家庭作业标签。