我很抱歉问这个问题,但自从我在Prolog中编程以来已经很多了。我认为我习惯于强制性的范式。 :-(有没有一种方法可以有效地与事先获得项目集?
我试图获得项目集从Prolog的关系:
% transaction(Time, Client, Item)
transaction(1, 2, 10).
transaction(1, 2, 20).
transaction(2, 5, 90).
transaction(3, 2, 30).
transaction(4, 2, 40).
transaction(4, 2, 60).
transaction(4, 2, 70).
transaction(5, 4, 30).
transaction(5, 3, 30).
transaction(5, 3, 50).
transaction(5, 3, 70).
transaction(5, 1, 30).
transaction(6, 1, 90).
transaction(6, 4, 40).
transaction(6, 4, 70).
transaction(7, 4, 90).
% Transformation of transactions to Lists of items per Time per Client.
transaction2(Time, Client, List) :-
setof(Item, Time^Client^transaction(Time, Client, Item), List).
% Itemsets.
itemsets :-
transaction(Time, Client, _),
transaction2(Time, Client, List),
assert(init(List)).
% Main:
main(Itemsets) :-
itemsets,
setof(Basket, init(Basket), Itemsets),
retractall(init(Basket)).
然后,如果我请教主(X)我想获得:
X = [[10, 20], [30], [30, 50, 70], [40, 60, 70], [40, 70], [90]]
我只是不能找出正确的做法
如果我能得到一个指针或一点帮助,我将非常感激
个最好成绩,
B.
嗨!非常感谢你!它马上工作。我可以在哪里了解关于setof和Nil的更多信息?我一直在阅读SWI Prolog和XSB手册以了解更好的集合,但我认为我需要用例子进行更深入的解释。谷歌没有得到帮助。也许我没有使用正确的关键字... – 2011-05-05 21:25:06
寻找bagof/3也。没有太多的信息,但我想你会学习尝试一些例子。 – gusbro 2011-05-05 21:38:23
+1到gusbro。 @B。 Solano:在[* LPN *](http://cs.union.edu/~striegnk/learn-prolog-now/html/node97.html#subsec.l11.bagof)上阅读'bagof/3'部分,然后是'setof/3'上的下一节。 – 2011-05-06 08:58:30