Z = [_G305].
означает, что этот ответ верен для всех терминов.То есть это верно не только для Z = [1] - как вы ожидаете, но и для Z = [2].
Очевидно, это не то, что вы ожидали.
Так где же ошибка?Простой способ обнаружить это - следить за анонимными переменными, обозначенными _.
. Рассмотрим:
intersectionx([H|T], Y, [_|Z]) :- memberx(H, Y), !, intersectionx(T, Y, Z).
^^^
То, что вы написали, означает, что пересечение списка, начинающегося с H, и другого спискабудет (при условии, что цели с правой стороны верны) списком, начинающимся с чего угодно ... Заменить что-либо на это H!