列表添加Prolog

时间:2018-03-13 17:17:45

标签: list prolog sum

如果我有一个清单:

food_price(banana,2).
food_price(apple,1).
food_price(chocolate,5).
food_price(milk,3).
food_price(coffee,4).

如果我想使用'total_price / 2'总结这样的价格:

?- total_price([banana, apple, milk], Price).
   Price = 6.

我怎样才能让它发挥作用?我只知道在prolog列表中添加数字可以这样写:

sum([H|T], Price) :- sum(T, H, Price).
sum([], Acc, Acc).
sum([H|T], Acc, Price) :- NewAcc is H + Acc, sum(T, NewAcc, Price).

但我怎样才能将价格与食物名称相匹配?感谢。

1 个答案:

答案 0 :(得分:1)

使用maplist/3

可以轻松完成此操作
total_price(FoodList, TotalPrice) :-
    maplist(food_price, FoodList, PriceList),
    sumlist(PriceList, TotalPrice).

maplist/3food_price调用应用于FoodList的每个元素,并在PriceList中提供相应的成功参数。然后,您只需使用sumlist/2添加它们。

如果您不想使用maplistsumlist,可以使用简单的列表递归轻松创建这些内容。