序言。如何在事实中访问列表的成员?

时间:2013-10-25 17:00:53

标签: prolog

假设我有一个清单的事实:

members([a,b,c,d]).

如何编写规则:

ismember(X) %returns 'Yes' only if X is a or b or c or d.

需要纯Prolog的解决方案,没有任何库。

2 个答案:

答案 0 :(得分:2)

首先,我们需要谓词member(X, List)。或member1

member1(X, [X|_]).
member1(X, [_|T]) :- member1(X, T).

因此,规则ismember将如下所示:

ismember(X):-
  members(List),
  member(X, List). %or member1 if we need to define membership rule

答案 1 :(得分:0)

如果参数包含在ismember/1的列表中,您是否需要成功的谓词members/1?即,如果您的事实是members([1,2,3]),如果X是a,b,c或d,ismember(X)是否仍会成功?如果你需要一元谓词,那么也许你实际上并不想查看members/1这个事实;如果你需要一个二元谓词,那么你需要你自己的member/2谓词,正如mrbatch所说......