嵌套列表我要檢查,如果x
是嵌套列表的成員的成員,使檢查,如果事情是在序言
member(x,[a,b,[c,d],[e,[f,g],[x,i]]])
回報True
和False
如果沒有x
。這可能以某種方式嗎?
嵌套列表我要檢查,如果x
是嵌套列表的成員的成員,使檢查,如果事情是在序言
member(x,[a,b,[c,d],[e,[f,g],[x,i]]])
回報True
和False
如果沒有x
。這可能以某種方式嗎?
簡單地通過增加檢查,如果該項目是第一個元素成員的條款展開正常的遞歸member
定義:
member(X, [X|_]). %X is first element
member(X, [L|_]) :- member(X, L). %X is member of first element
member(X, [_|T]) :- member(X, T). %X is member of tail
您還可以使用flatten/2讓所有元素在同一水平,然後使用普通成員:
?- flatten([a,b,[c,d],[e,[f,g],[x,i]]],Xs), member(x,Xs).
Xs = [a, b, c, d, e, f, g, x, i] ;
false.
如果X不包含:
?- flatten([a,b,[c,d],[e,[f,g],[y,i]]],Xs), member(x,Xs).
false.
通過這個,你可以在一個簡單的列表中找到該成員。 (_) - >辛格爾頓可變
//Base Case
member(X, [X | _ ]).
member(X, [ _ | T]) :- member(X, T).
通過這個,你發現使用一個簡單的列表的認定中的嵌套列表中的成員
:
nestedListMember(X, [H | T]) :-
member(X,H);
nestedListMember(X,T). %Recursive call looking in the tail
nestedListMember(X,[T]) :-
nestedListMember(X,T). %You look for all the subsequent cases