我正在尝试创建 Prolog 规则以在 Prolog 中以列表形式枚举“二叉树”。我是 Prolog 的新手。
具有 0 个节点的树是一个空列表:
[]
一棵有 1 个节点的树是:
[[],[]]
具有 2 个节点的树有 2 种可能性:
[[],[[],[]]]
[[[],[]],[]]
等等。
这是我的规则:
bintree(0,[]).
bintree(1,[[],[]]).
bintree(N,[Lc,Rc]) :-
N > 1,
bintree(N1,Lc),
bintree(N2,Rc),
N1 >= 0,
N2 >= 0,
N3 is N1+N2+1,
N==N3.
对 0 和 1 的查询显然有效。对于 N=2,它会打印一种可能性,但在我输入分号以获得另一种可能性后会给出错误。N>2 的查询直接报错。错误总是一样的:
ERROR: >/2: Arguments are not sufficiently instantiated
我在一些网站上读到了这个错误,但我不知道是什么导致了这个错误。
提前感谢您的帮助。