你可以写:
real_line(X,Y):-line(X,Y),point(X),point(Y).
Prolog 中的, 表示逻辑“和”,因此当 X,Y 成立时,上述谓词 real_line/2 成功:line(X,Y) 和 X 是一个点,Y是一个点。
一些例子:
?- real_line(a,z).
true.
?- real_line(a,k).
false.
?- real_line(l,k).
false.
?- real_line(X,Y).
X = a,
Y = z.
?- real_line(X,z).
X = a.
?- real_line(a,Y).
Y = z.
更新
根据您的 cmets 找到您可以使用的所有错误行:
findall(line(X,Y),(line(X,Y), \+ real_line(X,Y)),L).
例子:
?- findall(line(X,Y),(line(X,Y), \+ real_line(X,Y)),L).
L = [line(l, k), line(k, l), line(k, a)].
OR 带有失败驱动的循环:
write_incorrect_lines:-
line(X,Y),
\+real_line(X,Y),
write(line(X,Y)),
nl,
fail;
true.
例子:
?- write_incorrect_lines.
line(l,k)
line(k,l)
line(k,a)
true.