我对Prolog有一个小问题。我真的不懂这种语言。 我必须检查图表是否是树,我不知道我该怎么做。 你有什么想法吗?
答案 0 :(得分:0)
嗯......首先,你要定义“树”。在我的头顶,树是有向图。而且你需要一种在Prolog中表示有向图的方法。一旦这样的方式是这样的:
%
% a predicate to define your nodes. Not truly necessary,
% but you might find it useful for carrying payload around.
%
node(X [, payload] ).
%
% says that an edge run from node X to node Y.
% you also might want to carry payload here (for
% instance, your edges might have some weight/cost associated with
% them, such as distance, price, etc.
%
edge(X,Y [, payload] ). % says that an edge runs from node X to node Y.
树具有以下属性:
树中的每个节点最多只有一个父节点(基数为零或一),它通过单个入站边连接到该节点(暗示子节点不知道谁它的父母是。
树中的每个节点都有零个或多个子节点(基数为零对多),每个节点都通过一个出站边连接(暗示每个节点都知道它的子节点是谁)。 / p>
树具有单个根节点,一个没有父节点(例如,没有入站边缘)。如果有向图具有多个根节点,则它是林(树木)。
没有子节点(出站边缘)的节点是叶节点。
这会导致树的递归定义:树中的每个节点都可以看作是一棵树,对吧?这应该引导您采用描述性解决方案(在Prolog中)。
试试看,给我们一些示例代码,我们可以给你一些帮助。