如何不修改Prolog知识库,通过穷尽搜索查询最年轻的人?
找出知识库中最年轻的人的Prolog查询方法
给定存储人物出生年份的Prolog知识库:
birthYear( adam , 2000 ). birthYear( bob , 2001 ). birthYear( john , 2002 ).
以下两种查询方式都能在不修改原知识库的前提下,通过穷尽搜索找到最年轻的人(即出生年份最大的人物):
方法一:收集所有记录后取最大值
利用findall收集所有(出生年份, 人物)的元组,再通过max_member找出其中年份最大的记录,对应的人物就是最年轻的:
findall((Y, P), birthYear(P, Y), Pairs), max_member((MaxY, Youngest), Pairs).
执行后会返回MaxY = 2002, Youngest = john。
方法二:通过全域验证确认最大值
先匹配任意人物及其出生年份,再用forall验证知识库中不存在出生年份更大的人物,以此确认当前人物是最年轻的:
birthYear(Youngest, MaxY), forall(birthYear(_, Y), Y =< MaxY).
执行后同样会返回MaxY = 2002, Youngest = john。
内容的提问来源于stack exchange,提问作者Azmine Sachchha
相关产品推荐
相关产品推荐

