I want to create a predicate in Prolog which will check if a list A is a sublist of a list B. Moreover I do not want my program to consider an empty list as a subset of another one.
E.g. included_list([1,4],[1,2,3,4,5]). true. included_list([2,3],[1,2,3,4,5]). true. included_list([1,6],[1,2,3,4,5]). false. included_list([],[1,2,3,4,5]). false. and so on...
So, I have written the following code so far:
member(X,[X|Tail]).
member(X,[Head|Tail]):- member(X,Tail).
included_list([X],_).
included_list([Head|Tail],List):- member(Head,List), included_list(Tail,List).
But the above code seems to be wrong, because in one specific case it throws true, instead of throwing wrong. I wish I'd made it clear having presented the following screenshot:
As you might have noticed the fifth(5th) sentence gives true, instead of wrong. That is, when I write a sentence of the form:
included_list([x,y],[w,x,v,z]).
whereas only x is included in the second list(and not y) the program gives me true(and this is wrong).
In general, if the first argument of the first list is included in the second list then, no matter if the rest of the former are included in the latter, the program gives me true.
In any other case the program gives me the right result(true or false).
What do I do wrong?
I will be waiting for your answers!
Thank you in advance!

member/2is ISO, so there is no need for you to define it yourself. And Prolog throws exceptions, not true or "wrong." - Daniel Lyonsincluded_list/2is true for any one-item list. Instead sayincluded_list([], _)and it will work just fine. - Daniel Lyonsforall(member(X, Subset), member(X, List))but I'm deeply annoyed that it does not generate! - Daniel Lyonsfindallis for?forallis meant to be used for the side effect, and the fact that it does not create bindings is by design. - user1812457findall/3. Do you see how to do it? - Daniel Lyons