程序仅X = adam
因为您插入了剪辑而返回!
。当您找到正确的规则并且您不需要做进一步的评估时使用切割,但它会切割所有其他解决方案。
在你的情况下
num_parent(adam, X) :- !, X = 0.
num_parent(eve, X) :- !, X = 0.
num_parent(_, 2). %replaced num_parent(X, 2) with num_parent(_, 2) to avoid singleton variable
num_parent(X, 0)
只返回X = adam
。
如果你写
num_parent(adam, X) :- X = 0.
num_parent(eve, X) :- !, X = 0.
num_parent(_, 2).
解决方案是X = adam
and X = eve
,在这种情况下:
num_parent(adam, X) :- X = 0.
num_parent(eve, X) :- X = 0.
num_parent(_, 2).
解决方案将是X = adam
,X = eve
并且false
因为查询num_parent(X, 0)
不与num_parent(_, 2)
.
您可以使用跟踪器更好地查看此行为。