如何用prolog计算列表的长度

如何用prolog计算列表的长度,prolog,Prolog,我有下面的清单 List = [['Dev', 'Jon'], ['Dev', 'Darin'], ['Dev', 'Hans'], ['Test', 'Richard'], ['Test', 'Mike'], ['Test', 'Jon'], ['Test', 'Hans'], ['Chef', 'Bozho'], ['Chef', 'Mike'], ['Chef', 'Jon']] . 我想计算每个人出现的次数,并一步一步地加上他的时间 例如,结果如下: [['Dev', 'Jon',

我有下面的清单

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]]

非常感谢:)

解决方案可能是这样的:

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
list为所有人存储计数器,使用
Zs
list为每个人累积相应的索引。希望有帮助。

它不起作用:(,错误如下:在选择中键入错误(['Jon',[U 559],][,[U 561)我尝试了
转换(['Dev','Jon'],['Dev','Darin'],['Dev','Hans'],['Test','Richard'],['Test','Mike'],['Test','Hans'],['Test','Hans'],['Chef','Bozho'],['Chef','Jon'],['Chef','Jon'],L2)
在Swi Prolog中,它起了作用。我认为您可以从代码中领会想法,并使其以您想要的方式工作。您是对的:)我输入错误,现在工作正常,非常感谢:)