【发布时间】:2016-03-17 20:41:14
【问题描述】:
我是 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).
假的。
我知道我的 member() 规则有效,因为我可以产生以下结果:
23 ?- member(john, [peter, paul, john]).
是的
谁能指出我正确的方向?提前谢谢你。
【问题讨论】:
-
Prolog 不是这样工作的。
males不是返回列表的函数。这是您声明的事实,需要对其进行查询:male(X).查询将返回X = [john, joseph, aaron, peter, paul, mark, ben, adam, daniel]。但请参阅鲍里斯的回答,以更恰当地断言这些事实。
标签: prolog