Prolog: Comparing Lists Within Lists

  • Thread starter KataKoniK
  • Start date
In summary, Prolog can compare two lists within lists using the built-in predicate "==" or "equals", taking into account the order and elements of the lists. It can also compare lists with different lengths, but they will be considered unequal if the shared elements are not in the same order. Prolog treats nested lists as single elements when comparing, and it can compare lists with different types of elements using unification. Other built-in predicates such as "member", "subset", and "superset" can also be used for comparing lists in Prolog.
  • #1
KataKoniK
1,347
0
Does anyone here know Prolog? I'm using the SWI-Prolog interpreter.

Given this list: [[1, 2], [2, 3], [3, 4]] how do you make it say Yes if 2 (of the first list) = 2 (of second list) and 3 (of second list) = 3 (of third list)? I'm having trouble visualizing this fact as the elements in the lists are lists, so we are basically dealing/recursing a list within a list.
 
Technology news on Phys.org
  • #2
How about this

Can't you just say this:

g([A,B],[B,C],[C,D]).

?
 
  • #3


Yes, I am familiar with Prolog and the SWI-Prolog interpreter. To compare lists within lists, you can use the built-in predicate member/2, which checks if an element is a member of a list. In this case, we can use it to check if the second element of the first list is the same as the second element of the second list, and if the third element of the second list is the same as the third element of the third list.

So, your code would look something like this:

?- member([_, 2], [[1, 2], [2, 3], [3, 4]]), member([_, 3], [[2, 3], [3, 4]]).
Yes

Here, the first member/2 predicate checks if there is a list in the given list that has 2 as its second element. The second member/2 predicate then checks if there is a list in the given list that has 3 as its third element. Since both conditions are met, Prolog will return Yes.

I hope this helps you solve your problem. Let me know if you have any further questions.
 

FAQ: Prolog: Comparing Lists Within Lists

How does Prolog compare two lists within lists?

In Prolog, lists can be compared using the built-in predicate "==" or "equals". This predicate checks if two lists have the same elements in the same order.

Can Prolog compare lists with different lengths?

Yes, Prolog can compare lists with different lengths. However, if the lists are of different lengths, they will be considered unequal even if the shared elements are the same.

How does Prolog handle nested lists when comparing?

Prolog treats nested lists as single elements when comparing. This means that nested lists will be compared as a whole rather than comparing the elements within the nested list individually.

Can Prolog compare lists with different types of elements?

Yes, Prolog can compare lists with different types of elements. However, it is important to note that Prolog uses unification when comparing elements, so elements with different types may not be considered equal even if they have the same value.

Are there any other built-in predicates for comparing lists in Prolog?

Yes, there are other built-in predicates for comparing lists in Prolog such as "member", "subset", and "superset". These predicates can be used to check if a list is a member of another list, if a list is a subset of another list, or if a list is a superset of another list, respectively.

Back
Top