设想
我有如下代码。我的问题是如何不多次显示相同的结果。
male(charles).
male(andrew).
male(edward).
female(ann).
age(charles, 70).
age(ann, 65).
age(andrew, 60).
age(edward, 55).
nextking(X) :- age(X,P), age(Y,Q),
P>=Q, X\==Y; age(X,55).
Run Code Online (Sandbox Code Playgroud)
电流输出
我需要的
我需要输出是查尔斯、安、安德鲁、爱德华。没有重复的名字。
使用相当新的版本,您可以使用库(solution_sequences):
?- distinct(nextking(X)).
X = charles ;
X = ann ;
X = andrew ;
X = edward.
Run Code Online (Sandbox Code Playgroud)
或使用经典的“所有解决方案”内置:
?- setof(K,K^nextking(K),Ks),member(X,Ks).
Ks = [andrew, ann, charles, edward],
X = andrew ;
Ks = [andrew, ann, charles, edward],
X = ann ;
...
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我们失去了知识库定义的答案顺序。
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |