【发布时间】:2022-09-23 02:39:59
【问题描述】:
如果我有一个关于人及其生日的知识库,例如:
birthYear( adam , 2000 ).
birthYear( bob , 2001 ).
birthYear( john , 2002 ).
如何在不修改知识库的情况下创建一个查询来彻底搜索知识库以找到最年轻的人?
-
使用 findall/3 和 minlist 或 maxlist
标签: prolog
如果我有一个关于人及其生日的知识库,例如:
birthYear( adam , 2000 ).
birthYear( bob , 2001 ).
birthYear( john , 2002 ).
如何在不修改知识库的情况下创建一个查询来彻底搜索知识库以找到最年轻的人?
标签: prolog
可以使用aggregate_all:
person_year(adam, 2000).
person_year(bob, 2001).
person_year(john, 2002).
youngest_person(Person) :-
% Find lowest year
aggregate_all(min(Y), person_year(_P, Y), Year),
% Lookup person from lowest year
person_year(Person, Year).
结果 swi-prolog:
?- youngest_person(Person).
Person = adam.
【讨论】: