You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:55:15