我正在努力完成任务。
首先,我们必须定义谓词tree/1
,其中node(leaf(1), node(leaf(2), leaf(3)))
。应该返回真实
tree(leaf(_)).
tree(node(X,Y)) :- tree(X), tree(Y).
很简单。
现在我必须编写两个谓词,它们应该基本相同。 label/2
和labels/2
。
label(B,X)
会检查X
中B
是否为标签,并且应打印X=1;X=2;X=3
。对于上面给出的例子。(B
是二叉树)
labels(B,Y)
与label/2
相同,只是Y
是包含所有标签的列表。 (Y=[1,2,3])
。
我现在拥有的:
label(leaf(Y),X) :-
%print X?
label(node(Y,Z),X) :-
label(Y,X), label(Z,X).
和
labels(leaf(Y),X) :-
%append Y to X
labels(node(Y,Z),X) :-
labels(Y,X), labels(Z,X).
当prolog打印为true并且它为X
/ Y
提供解决方案时,我无法绕过头脑。