我在一本字典類節目正在與序言,我的代碼是這樣的:在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