我正在使用在线编译器https://swish.swi-prolog.org/
给出以下事实:
frontier(spain,france).
frontier(spain,portugal).
frontier(portugal,spain).
frontier(france,spain).
frontier(france,italy).
frontier(france,germany).
frontier(france,belgium).
frontier(france,swiztland).
frontier(belgium,netherlands).
frontier(belgium,france).
frontier(belgium,germany).
frontier(netherlands,germany).
frontier(netherlands,belgium).
frontier(germany,netherlands).
frontier(germany,belgium).
frontier(germany,france).
frontier(germany,austria).
frontier(germany,swiztland).
frontier(austria,germany).
frontier(austria,swiztland).
frontier(austria,italy).
frontier(swiztland,austria).
frontier(swiztland,france).
frontier(swiztland,germany).
frontier(swiztland,italy).
frontier(italy,france).
frontier(italy,swiztland).
frontier(italy,austria).
我想获得所有国家,但没有得到重复的国家。
因此,我使用了setof谓词,它避免了重复,如下所示:
setof(Country, (frontier(Country,_)), Countries).
问题在于,当我执行查询时,我获得了一些迭代:
- [德国,意大利,瑞士]
- [法国,德国,荷兰]
- [比利时,德国,意大利,西班牙,瑞士],
- [奥地利,比利时,法国,荷兰,瑞士]
- [奥地利,法国,瑞士]
- [比利时,德国]
- [西班牙]
- [法国,葡萄牙]
- [奥地利,法国,德国,意大利]
我不明白为什么,我希望列表Countries
向我返回所有国家(没有重复的国家)的列表并进行排序,这就是为什么我在谓词边界的第二个参数中使用匿名变量,因为我不在乎第二个参数,所以只希望第一个参数不重复。
有帮助吗?