Я пытаюсь разработать код в прологе для захвата элементов с частотой 0. Посмотрите на пример, кортеж:
[[1,31],[2,0],[3,21],[4,0],[5,0]]
Где каждый элемент представляет собой что-то еще с 2 элементами в каждом, поэтому элементы, которые должны быть захвачены, — это 2, 4 и 5 для частоты 0. Код ниже представляет идею:
match([],_).
match([[A,Y]|Tail],[A|Tail2]):- Y==0,match(Tail,[Tail2|A]),!.
match([[_,_]|Tail],X):- match(Tail,X).
Передаются два параметра: кортеж, содержащий набор целевых значений и частот,
(["Target value", "frequency"], ["target value", "frequency"], ...]
И второй параметр, который является переменной, получает целевые элементы. Однако абстракция, которую я должен был разработать, неверна, потому что результаты не такие, как ожидалось. Я прошел шаг за шагом, чтобы понять, изменил несколько вещей, и результат всегда один и тот же ... В любом случае возвращается список только из 2 элементов (даже если есть только одна цель с частотой 0).
Пример с 3 целями частоты 0:
?- match([[1,31],[2,0],[3,312],[4,0],[5,0]],X).
X = [2|4].
Ожидаемый результат для этого случая: X = [2,4,5].
Пример с 1 целевой частотой 0:
?- match([[1,31],[2,0],[3,312],[4,312],[5,123]],X).
X = [2|_9998].
Ожидаемый результат для этого случая: X = [2].
Кто-нибудь может мне помочь?