prolog - 检查一个国家/地区是否达到阈值
问题描述
大家好,我是 prolog 的新手,我正在尝试理解一些事情:
我有这个数据库:
countries([belgium, france, germany, italy, luxembourg, netherlands]).
weight(france, 4).
weight(germany, 4).
weight(italy, 4).
weight(belgium, 2).
weight(netherlands, 2).
weight(luxembourg, 1).
threshold(12).
我制作了这个程序来查看一个国家列表是否有足够的票数超过阈值,我想使用谓词 win/1
winning([H|T]):-
weight(H, N1),
winning(T),
weight(T, N2),
N is N1 + N2,
N>=X,
threshold(X).
该程序完美运行,直到它必须将投票权相加并得出投票是否达到阈值为止。
这很困难,因为我只想使用谓词 win/1 有人可以帮助我吗?
解决方案
它没有将 N1 和 N2 加到 N 中的原因是因为您要询问整个尾巴的重量数,而您应该只获得尾巴头部的重量。在这一点上你还没有。
您想创建一个单独的(递归)规则,wining/2 并从 wins/1 中调用它:
winning(Countries) :-
winning2(Countries,0).
在这个单独的 wins/2 中,您调用存储在 N 中的权重,并递归地回调 wins/2 直到 N 达到阈值。
winning2([],N) :-
threshold(X),
N >= X.
winning2([Country|Tail], N) :-
weight(Country,X),
NewN is X + N,
winning2(Tail, NewN).
推荐阅读
- javascript - 如何在位置固定的div下放置元素?
- python - Pandas:使用多个条件设置 var
- python - 多态性和 with 语句
- flowchart - 如何对齐美人鱼流程图节点中的文本?
- c# - ASP.Net Web API 和 CosmosDB。无法弄清楚如何在另一个服务类中使用一个服务类
- python - 当我导入我的个人库时,pd.DataFrame 上的简单求和函数需要永远
- python-3.x - 有没有办法拥有动态类?一个构造函数,给定数据状态,自动水合不同的类?
- android - 安卓 。使用默认风味/构建类型源文件夹
- android - 后台进程和正常运行时如何使用相同的实例对象
- javascript - 用打字稿反应孩子