Prolog 序言:为什么谓词会返回“;是”;使用基本术语查询时,但是;否";当使用变量时?

Prolog 序言:为什么谓词会返回“;是”;使用基本术语查询时,但是;否";当使用变量时?,prolog,Prolog,我正在用Prolog写一个程序。我已重新命令目标停止无限递归 然而,它仍然有问题 查询时 以下面的谓词为例 | ?- predicate([x,y,z],x). yes | ?- predicate(X,x). X = [x] ?; X = [x,y] ?; no | ?- predicate([x,y,Z],x). no 谓词为什么会这样做?我不能发布我的代码,但是一些关于是什么导致这种事情的建议会很好。如果它知道在使用基本术语时查询是有效的,那么为什么在使用变量时却找不到它呢?它甚至没有陷

我正在用Prolog写一个程序。我已重新命令目标停止无限递归

然而,它仍然有问题

查询时

以下面的谓词为例

| ?- predicate([x,y,z],x).
yes
| ?- predicate(X,x).
X = [x] ?;
X = [x,y] ?;
no
| ?- predicate([x,y,Z],x).
no

谓词为什么会这样做?我不能发布我的代码,但是一些关于是什么导致这种事情的建议会很好。如果它知道在使用基本术语时查询是有效的,那么为什么在使用变量时却找不到它呢?它甚至没有陷入递归或其他任何问题,它只是说没有更多的解决方案了,如果有的话

在第二个示例中,在本例中,
no
意味着它在
X=[X,y]
之后没有找到更多的解决方案。在你的最后一个例子中,它意味着找不到解决方案。是相关的吗?@潜伏者我知道“否”意味着什么。但我的问题是,为什么它可能找不到更多的解决方案。i、 e.什么时候谓词([x,y,z],x)。返回是,为什么不返回?-谓词([x,y,Z],x)返回Z=Z?或者?-谓词(X,X)返回X=[X,y,z]?@vmg将我的一个目标中的“\=”替换为“dif”似乎有帮助。我不太明白为什么,但我会调查的。谢谢
dif/2
是纯粹的、单调的
(\=)/2
是一种仅适用于“充分实例化”目标的黑客攻击。确定“充分实例化”的实际含义非常复杂且容易出错。在第二个示例中,在本例中,
no
意味着它在
X=[X,y]
之后没有找到更多的解决方案。在你的最后一个例子中,它意味着找不到解决方案。是相关的吗?@潜伏者我知道“否”意味着什么。但我的问题是,为什么它可能找不到更多的解决方案。i、 e.什么时候谓词([x,y,z],x)。返回是,为什么不返回?-谓词([x,y,Z],x)返回Z=Z?或者?-谓词(X,X)返回X=[X,y,z]?@vmg将我的一个目标中的“\=”替换为“dif”似乎有帮助。我不太明白为什么,但我会调查的。谢谢
dif/2
是纯粹的、单调的
(\=)/2
是一种仅适用于“充分实例化”目标的黑客攻击。确定“充分实例化”的实际含义非常复杂且容易出错。