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
相关产品推荐
相关产品推荐

