XSB序言:列表问题

时间:2013-11-25 18:35:17

标签: list prolog

我是XSB prolog的新手,我正试图解决这个问题。

我有产品价格和一些订单。它看起来像这样:

price(cola,3).                         
price(juice,1).          
price(sprite,4).
// product for ex. is cola with a price of 3 (something, it doesn't matter which currency)

order(1, [cola,cola,sprite]).   
order(2, [sprite,sprite,juice]).    
order(3, [juice,cola]).     // the number here is the number of the order
                            // and the list represents the products that
                            // belong to that order

现在,我的任务是编写一个名为bill / 2的新函数。此功能应采用订单编号,然后按相同的顺序(列表)汇总产品的所有价格。

类似的东西:

|?-bill(1,R). 

R= 10 ==> ((cola)3 + (cola)3 + (sprite)4 = 10)             

|?-bill(2,R).

R= 9   ==> ((sprite)4 + (sprite4 + (juice)1 = 9) 

等等...我知道如何获得订单的数量,但我不知道如何从订单中的每个产品中获取它的价格,所以我可以总结一下。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在简单的Prolog中,首先获取列表中的所有数字,然后对列表求和:

bill(Ord, Tot) :-
   order(Ord, Items),
   findall(Price, (member(I, Items), price(I, Price)), Prices),
   sum_list(Prices, Tot).

但是由于XSB可以使用表格,因此可以采用更好的方式,使用一些聚合函数。