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

Prolog中使用findall查询指定年份范围gradrate事实的方法咨询

解决方案

你需要把between谓词和gradrate查询条件做合取,放在findall的第二个参数位置即可,正确实现代码如下:

lists(A):-
    findall(X, (between(2011, 2015, Year), gradrate(Year, _, X)), A).

说明

  • between(2011,2015,Year)会依次生成2011、2012、2013、2014、2015五个值绑定到Year变量
  • 两个查询条件用括号包裹是为了明确作用域,避免谓词参数优先级错误
  • 如果你需要同时返回对应的年份、族群信息,可以调整收集的目标参数,示例如下:
    % 返回格式为 (年份, 族群, 毕业率) 的列表
    lists_with_info(A):-
        findall((Year, Ethnic, Rate), (between(2011, 2015, Year), gradrate(Year, Ethnic, Rate)), A).
    

如果你的Prolog运行环境不支持原生between,可以手动实现该谓词:

between(Min, Max, Min) :- Min =< Max.
between(Min, Max, Res) :-
    Min < Max,
    Next is Min + 1,
    between(Next, Max, Res).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:02