假设,我有一个列表事实:
members([a,b,c,d]).
如何编写规则:
ismember(X) %returns 'Yes' only if X is a or b or c or d.
需要一个纯 Prolog 的解决方案,没有任何库。
假设,我有一个列表事实:
members([a,b,c,d]).
如何编写规则:
ismember(X) %returns 'Yes' only if X is a or b or c or d.
需要一个纯 Prolog 的解决方案,没有任何库。
首先我们需要谓词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
ismember/1
如果参数包含在列表中,您是否需要一个成功的谓词members/1
?即,如果您的事实是members([1,2,3])
,ismember(X)
如果 X 是 a、b、c 或 d,仍然会成功吗?如果您需要一元谓词,那么也许您实际上并不想研究members/1
事实;如果你需要一个二元谓词,那么你需要你自己的member/2
谓词,正如上面的 mrbatch 所说......