使用Prolog构建BST

使用Prolog构建BST,prolog,binary-search-tree,Prolog,Binary Search Tree,这可能是一个极其琐碎的问题: 我正在用prolog建立一个抽象的BST,作为学校的额外学分。我对Prolog非常陌生,我无法想象如何做这样的事情 BST以leaf或节点(X,L,R)的形式创建,其中L为左侧或较小的BST,而R为右侧或较大的BST 我只提供了BST作为谓词的特性,例如card(BST,card),它返回card作为树中的元素数。所以像card(节点(1,叶,叶),card)应该返回1 我真不知道该怎么开始。我的想法是leaf和node是独立的谓词。但我怎么才能把它们“绑”在一起呢

这可能是一个极其琐碎的问题:

我正在用prolog建立一个抽象的BST,作为学校的额外学分。我对Prolog非常陌生,我无法想象如何做这样的事情

BST以
leaf
节点(X,L,R)
的形式创建,其中
L
为左侧或较小的BST,而
R
为右侧或较大的BST

我只提供了BST作为谓词的特性,例如
card(BST,card)
,它返回
card
作为树中的元素数。所以像
card(节点(1,叶,叶),card)
应该返回
1


我真不知道该怎么开始。我的想法是
leaf
node
是独立的谓词。但我怎么才能把它们“绑”在一起呢?如何定义
节点的规则?

X
的含义是什么
leaf
不会是谓词。它只是一个表示叶节点的原子。在Prolog中,谓词的调用与函数不同。所以
card(节点(1,叶,叶),card)
不会返回1。相反,它是一个成功的查询,
Card
实例化为1。您可以通过简单地断言事实来确保这一点,
card(node(u,leaf,leaf),1)
。您可以为
卡(节点(X,L,R),卡)
定义一个递归规则,可能有多个子句,说明如何确定
卡。但这是你的额外信用问题,不是我的,所以我不想放弃太多。:)X是数据,int