bond89,
Сейчас Вас вопрос сформулирован так, что единственный способ на него ответить - это написать за Вас программный код, который решает Вашу задачу. Но я этого не делаю, в соответствие с правилами этого форума.
Сформулируйте Ваш вопрос так, чтобы на него можно было ответить.
~~~~~ 15 Июн 2008, 20:00, спустя 7 минут ~~~~~
Создайте для себя вспомогательный предикат, который будет принимать на вход два списка.
Назовём его, к примеру, count_add
В первом списке будет элемент, во втором - сколько раз этот элемент встретился (счётчик).
Например, для списка [a,b,c,b,a,b] это будет два таких списка:
[a,b,c]
[2,3,1]
Этот вспомогательный предикат должен принимать на вход эти два списка и элемент, и должен либо увеличивать счётчик, соответствующий заданному элементу, либо добавлять новый элемент в оба списка (счётчик при этом будет равен 1).
После этого сделайте предикат, который будет формировать эти два списка из исходного списка. Назовём его, к примеру, count_all(). Этот предикат будет ходить по Вашему исходному списку и для каждого элемента исходного списка вызывать count_add().
После этого создайте ещё один предикат, который будет принимать на вход эти два списка и возвращать третий список, в котором есть только такие элементы исходного списка, которые встретились ровно три раза. Пусть, этот предикат будет называться count_search().
Ну и в завершение всего Вам потребуется Ваш целевой предикат, который будет это всё дело вызывать. Назовём его count_target(). То есть, он сначала сформирует те два списка, о которых я говорил в самом начале - для этого он вызовет предикат count_all(), и после этого сформирует нужный Вам результат - для этого он вызовет count_search().