1

假设,我有一个列表事实:

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

如何编写规则:

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

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

4

2 回答 2

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
于 2013-10-25T19:51:44.777 回答
0

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

于 2013-10-25T18:27:28.367 回答