我很难理解这一点。假设我有:
person(peter).
person(bob).
person(amanda).
Run Code Online (Sandbox Code Playgroud)
有没有办法证明没有两个人有相同的名字?我试着做:
person(X) = person(Y).
Run Code Online (Sandbox Code Playgroud)
但这给出了:
X = Y
Run Code Online (Sandbox Code Playgroud)
还是这就够了??
在上面,您正在使用一元关系person/1(代表单个参数)。您定义了 peter、bob 和 amanda 是人的事实。然后你问Prolog的统一person(X)和person(Y),即找到的最普遍的价值观X,并Y使得式成立。当然,我们只需要Y = X为此作出答复。
如果你想强制执行这样的条件,你需要用名字以外的东西来代表人们,否则他们将隐式相等。
说使用 id。
person(1).
person(2).
person(3).
name(1, peter).
name(2, bob).
name(3, amanda).
Run Code Online (Sandbox Code Playgroud)
然后查询
?- name(Y, X), name(Z, X), Y \= Z.
Run Code Online (Sandbox Code Playgroud)