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

Prolog技术问询:如何筛选配料列表被目标列表包含的冰淇淋

解决Prolog冰淇淋配料匹配问题

嘿,作为Prolog新手能尝试解决这个问题已经很棒啦!我来帮你实现这个which_icecream/2查询,满足你要找出配料列表被目标列表完全包含的冰淇淋需求~

首先,咱们先把题目里给定的事实原封不动保留下来:

icecream(number1, [chocolate,mango,lemon], 1.99).
icecream(number2, [vanille,lemon ], 1.79).
icecream(number3, [almonds, kiwi, walnut], 2.50).

接下来核心是实现判断“冰淇淋配料列表的所有元素都在目标列表里”的逻辑,咱们可以先写一个辅助谓词all_in/2来完成这个检查:

% 空列表的所有元素自然都在目标列表里
all_in([], _TargetList).
% 非空列表:第一个元素在目标列表里,且剩余元素也都在目标列表里
all_in([Member|Rest], TargetList) :-
    member(Member, TargetList),
    all_in(Rest, TargetList).

然后就可以定义咱们需要的which_icecream/2谓词了:

which_icecream(TargetIngredients, IcecreamNumber) :-
    icecream(IcecreamNumber, Ingredients, _Price),
    all_in(Ingredients, TargetIngredients).

测试一下你的查询

现在运行你需要的查询:

?- which_icecream([vanille,lemon,chocolate,mango], S).

你会得到期望的结果:

S = number1 ;
S = number2.

为什么number3不会被返回呢?因为它的配料almonds、kiwi、walnut都不在你给定的目标配料列表里,不符合“配料列表被目标列表包含”的条件~

内容的提问来源于stack exchange,提问作者user9746492

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:50