我是datalog的新手,本周得到了一份分配任务,我已经可以解决6/7问题。 我现在在最后一个方面挣扎。 我必须找到所有制成品(那些没有出现在其他产品的零件清单(stueli)中,并且已在来源事实(https://etutor.dke.uni-linz.ac.at/moodle/question/type/etutor/etutor_datalog_facts.php?id=3中出售给每个客户)
我已经过滤掉了其他任何Stueli(即成品)中没有的零件。我还创建了一个包括所有客户(kunden)的关系,并计算了其中有多少个客户。 我只是不知道如何只退还出售给每个客户的成品(这仅仅是一个:eb341234)。 感谢您提供任何有用的提示或解决方案!
事实
kundeInland(k1).
kundeInland(k2).
kundeExport(k3).
hatBezeichnung(k1,radprofi_gmbh).
hatBezeichnung(k2,bike_palast).
hatBezeichnung(k3,velo_schwyz).
produkt(eb341234).
produkt(eb123123).
produkt(zb120000).
produkt(t1).
produkt(t2).
produkt(t3).
produkt(t4).
hatBezeichnung(eb341234,mtb_extreme_downhill).
hatBezeichnung(eb123123,cb_comfort).
hatBezeichnung(zb120000,mtb_super_cross).
hatBezeichnung(t1,vorderrad_12).
hatBezeichnung(t2,speiche_12).
hatBezeichnung(t3,nabe_12).
hatBezeichnung(t4,kugellager_12).
stueli(eb341234,t1).
stueli(eb123123,t1).
stueli(t1,t2).
stueli(t1,t3).
stueli(t2,t4).
auftrag(ar123,k1).
auftrag(ar125,k3).
auftrag(ar128,k2).
auftragpos(pos1,ar123,eb341234,3).
auftragpos(pos2,ar123,eb123123,2).
auftragpos(pos3,ar123,zb120000,4).
auftragpos(pos4,ar125,eb341234,2).
auftragpos(pos5,ar125,zb120000,1).
auftragpos(pos6,ar128,eb341234,5).
查询
% finished products
produkteinstuecklisten(P) :- produkt(P), stueli(_,P).
fertigprodukt(X) :- produkt(X), not produkteinstuecklisten(X).
%customers + count
kunden(X) :- kundeInland(X).
kunden(X) :- kundeExport(X).
kundencount(N) :- #count{K: kunden(K)} = N.
produktAnAlleVerkauft(X) :- fertigprodukt(X).
预期输出应为: produktAnAlleVerkauft(produktId) 并且应该只输出一个结果: produktAnAlleVerkauft(eb341234)