如果我有一个清单:
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).
但我怎样才能将价格与食物名称相匹配?感谢。
答案 0 :(得分:1)
使用maplist/3
:
total_price(FoodList, TotalPrice) :-
maplist(food_price, FoodList, PriceList),
sumlist(PriceList, TotalPrice).
maplist/3
将food_price
调用应用于FoodList
的每个元素,并在PriceList
中提供相应的成功参数。然后,您只需使用sumlist/2
添加它们。
如果您不想使用maplist
或sumlist
,可以使用简单的列表递归轻松创建这些内容。