Как рассчитать длину списка по прологу - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть список, следующий за

List = [['Dev', 'Jon'], ['Dev', 'Darin'], ['Dev', 'Hans'], 
['Test', 'Richard'], ['Test', 'Mike'], ['Test', 'Jon'], ['Test', 'Hans'], 
['Chef', 'Bozho'], ['Chef', 'Mike'], ['Chef', 'Jon']] .

Я хочу подсчитать, сколько раз каждый человек появляется и, например, шаг за шагом добавлять его время, результат следующий:

[['Dev', 'Jon', 1], ['Dev', 'Darin',1], ['Dev', 'Hans', 1], 
['Test', 'Richard', 1], ['Test', 'Mike', 1], ['Test', 'Jon', 2], ['Test', 'Hans', 2], 
['Chef', 'Bozho', 1], ['Chef', 'Mike', 2], ['Chef', 'Jon', 3]]

большое спасибо:)

1 Ответ

0 голосов
/ 10 апреля 2011

Решение может быть примерно таким:

count([], _, Zs, Zs).
count([[X,Y]|T], Ys, Zs, Us) :- select([Y,C], Ys, Ys1), C1 is C+1, append(Zs, [[X,Y,C1]], Zs1), count(T, [[Y,C1]|Ys1], Zs1, Us), !.
count([[X,Y]|T], Ys, Zs, Us) :- append(Zs, [[X,Y,1]], Zs1), count(T, [[Y,1]|Ys], Zs1, Us).


transform(L1, L2) :- count(L1, [], [], L2).

Мы используем Ys список для хранения счетчиков для всех людей и Zs список для накопления каждого человека с соответствующим индексом.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...