prolog - Does an element exists in a list of lists? -


i want find if given element exists in list of lists. getting true if element exists somewhere first list of lists.

any advice?

memberlist(x,[[x|t1]|t2]). memberlist(x,[[h|t1]|t2]) :-   memberlist(x,[t1|t2]). 

the problem [[h|t1]|t2] matches given first list has at least 1 element. indeed: [[],[1,4],[2,5]] instance not unify [[h|t1]|t2].

so can solve problem adding clause:

memberlist(x,[[]|t2]) :-     memberlist(x,t2). 

thus obtain:

memberlist(x,[[x|_]|_]). memberlist(x,[[h|t1]|t2]) :-     memberlist(x,[t1|t2]). memberlist(x,[[]|t2]) :-     memberlist(x,t2). 

the first clause uses underscores specify "not interested" in these variables. common prolog programs (probably interpreter warned t1 , t2 mentioned once).

so in case first list exhausted, move next list.

your predicate lot of "packing" , "unpacking". furthermore can make use of member/2 builtin. can rewrite it:

memberlist(x,[h|_]) :-     member(x,h). memberlist(x,[_|t2]) :-   memberlist(x,t2). 

Comments

Popular posts from this blog

php - Permission denied. Laravel linux server -

google bigquery - Delta between query execution time and Java query call to finish -

python - Pandas two dataframes multiplication? -