我是Prolog的新手。是否有可能在Prolog中「聲明」一個列表爲事實,然後輕鬆訪問?我正在研究家庭樹型問題。首先,我想宣佈一羣男性屬於男性名單。然後我希望能夠查詢某個人是否是男性。這裏是我到目前爲止已經編寫的代碼:在Prolog中聲明和搜索列表的正確方法?
% ------------------------------------------------------------------------- %
% Facts:
males([john, joseph, aaron, peter, paul, mark, ben, adam, daniel]).
% ------------------------------------------------------------------------- %
% Rules:
% Member of a List
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
male(X) :- member(X, males).
然而,未如預期我的輸出:
21 ?- male(john).
假。
我知道我的()成員規則工作,因爲我可以產生如下結果:
23 ?- member(john, [peter, paul, john]).
真正
任何人都可以點我在正確的方向?先謝謝你。
這不是Prolog的工作方式。 'males'不是返回列表的函數。這是一個事實,你聲明,並且需要被查詢:'男性(X).'查詢將返回'X = [約翰,約瑟夫,亞倫,彼得,保羅,馬克,本,亞當,丹尼爾]'。但請參閱鮑里斯的回答,以更正確地說明這些事實。 – lurker