gpt4 book ai didi

prolog - GNU Prolog - 搜索事实列表

转载 作者:行者123 更新时间:2023-12-05 00:05:36 24 4
gpt4 key购买 nike

我一定是脑子放屁什么的,但我似乎无法找到解决办法。

如果您有一个 list 事实,例如:

%country(country, population, capital)
country(sweden, 8823, stockholm).
country(usa, 221000, washington).
country(france, 56000, paris).
country(denmark, 3400, copenhagen).

%city(city, country, population)
city(lund, sweden, 88).
city(new_york, usa, 5000).
city(paris, usa, 1).
city(copenhagen, denmark, 1200).
city(aarhus, denmark, 330).
city(odense, denmark, 120).
city(stockholm, sweden, 350).
city(washington, usa, 3400).
city(paris, france, 2000).
city(marseilles, france, 1000).

我想找到人口第二大的城市,在这种情况下是美国华盛顿,有 3400 人。你怎么能做到这一点?

谢谢。

最佳答案

试试这个尺寸:

second_largest_city(City) :-
findall(Size, city(_, _, Size), Sizes),
sort(Sizes, SortedSizes),
append(_, [Size2, _], SortedSizes),
city(City, _Country, Size2).

解释: findall/3查找所有 city/3 的大小事实,按 sort/2 升序排列删除了重复项。调用 append/3模式匹配对排序列表进行分区 SortedSizes分成两部分;任意大小的列表 ( _ ) 和长度为二的余数 ( [Size2, _] ) - 这将绑定(bind)变量 Size2city/3 到第二大城市规模事实。最后,所有具有这种规模的城市都位于 city/3 之间。事实,并且受输出约束。

注:如果您的 sort/2 的内置函数,这通常无法正常工作。不会删除重复项,因为这会留下 city/3 的可能性。具有多个相等最大值的事实将仅返回最大值(最大)。此实现使用 append/3寻找大小排序列表的倒数第二个元素也假设 sort/2将数字按升序排列。

另外,最后请注意,如果 city/3 少于两个,这将彻底失败。事实——但这可能很好,因为谓词寻找“第二大”城市,严格来说,除非数据库中确实至少有两个不同大小的城市,否则不会有一个。如果这是一个问题,您可以为 second_largest_city/1 编写更多子句。处理这样的案件。

关于prolog - GNU Prolog - 搜索事实列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com