如何在Prolog中实现条件判断并筛选符合预算的物品列表
实现
catalogue_budget谓词的完整方案 你的基准情况已经正确,接下来需要补充价格判断逻辑与结果收集的递归分支,以下是完整实现:
完整代码
% 物品价格定义 cost(phone, 1500). cost(tablet, 1300). cost(headphones, 200). cost(powerbank, 120). % 基准情况:空输入列表返回空结果 catalogue_budget([], _, []). % 分支1:当前物品价格≤预算,将其加入结果列表 catalogue_budget([Head|Tail], B, [Head|ResultTail]) :- cost(Head, Price), % 绑定当前物品的价格到变量Price(Prolog变量需大写) Price =< B, % 判断价格是否在预算内 catalogue_budget(Tail, B, ResultTail). % 递归处理剩余物品 % 分支2:当前物品价格>预算,跳过该物品,直接处理剩余列表 catalogue_budget([Head|Tail], B, Result) :- cost(Head, Price), Price > B, catalogue_budget(Tail, B, Result).
关键逻辑说明
- 价格绑定:用
cost(Head, Price)获取物品对应的价格,注意Prolog中变量必须大写,原代码里的price是原子,无法存储动态价格值。 - 条件分支:
- 当物品价格符合预算时,把当前物品放到结果列表头部,再递归处理剩余物品,收集后续结果。
- 当物品超预算时,直接跳过该物品,递归处理剩余列表,结果继承后续递归的返回值。
- 基准情况:输入物品列表为空时,返回空结果,预算参数用
_表示无需使用。
测试示例
执行查询:
?- catalogue_budget([phone, headphones, powerbank], 1000, I).
会得到结果:
I = [headphones, powerbank]
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

