我在一本字典类节目正在与序言,我的代码是这样的:在Prolog我怎么可以削减多余的答案
define(car,vehicle).
define(car,that).
define(car,has).
define(car,four).
define(car,wheels).
define(wheels,round).
define(wheels,object).
define(wheels,used).
define(wheels,in).
define(wheels,transportation).
defined(X):-define(X,_).
anotherdefined(X):- \+ undefined(X).
undefined(X):- \+define(X,_).
我想写一个定义/ 1谓词,这将给我:
?-defined(X).
X = car ;
X = wheels ;
false.
然而,我的定义/ 1给了我X=car.
5次(自然)为每次它抵抗define(car,_).
和我anotherdefined/1给了我唯一的true.
什么方法停止序言回溯到其他实例define(car,_).
,并跳至define(wheels,_).
?
编辑:我写了下面的行得到的结果我想givedefinedword/1,
listdefined(X):-findall(Y,defined(Y),Z),sort(Z,X).
givedefinedword(X):-listdefined(List),member(X,List).
然而,因为我想一个有效的谓词(我将在许多人使用),它打败目的。这个谓词做了太多的过程。
或者,使用修饰代码的谓词会更好吗?例如准备一个定义的单词列表,并在添加新定义时对其进行修改。
谢谢。
请参阅'bagof/3'和'setof/3'。 – 2014-10-22 06:23:27