假设我有一个清单的事实:
members([a,b,c,d]).
如何编写规则:
ismember(X) %returns 'Yes' only if X is a or b or c or d.
需要纯Prolog的解决方案,没有任何库。
答案 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所说......