使用Prolog构建BST
这可能是一个极其琐碎的问题: 我正在用prolog建立一个抽象的BST,作为学校的额外学分。我对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是独立的谓词。但我怎么才能把它们“绑”在一起呢
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