【发布时间】:2017-05-01 19:31:46
【问题描述】:
我是 prolog 的新手,我正在尝试实施 BST。 BST 以node(X,L,R) 的形式隐含,X 为正整数,L 左子树,R 右子树,leaf 为基本情况。
此 BST 的一个特点是能够搜索树的元素。如果Elem 是Bst 的元素,则elem(Bst,Elem) 成功,否则为假。
例子:
?- elem(leaf,_).
false.
?- elem(node(3,node(2,leaf,leaf),node(5,leaf,leaf)),2).
true.
我的实现尝试:
elem(leaf,Elem) :-
false.
elem(Bst,Elem) :-
Bst = node(X,L,R),
Elem > 0,
(Elem is X ->
true;
elem(L,Elem),
elem(R,Elem)).
但是我对这个 b/c 太确定了,我不确定 if-else 条件会发生什么。如果Elem is X 是true,这个想法显然是用true 成功,但由于prolog 没有“返回”任何东西,我不确定会发生什么。
这是对的吗?我如何解决它?我还能做些什么更好?
【问题讨论】:
-
您不确定您写的内容是否有效?你试过了吗?你不需要
elem(leaf, _) :- false.,因为elem(leaf, _)自然会失败,只要你没有规则或事实导致它成功。
标签: prolog