Sorting 在Prolog中按升序对参数值排序

Sorting 在Prolog中按升序对参数值排序,sorting,prolog,distance,Sorting,Prolog,Distance,我有一个包含这些参数的事实列表:名称、经度、纬度。我想写一个只对纬度排序的谓词。 这是我的部分事实 pool(roy, -75.702744, 45.4089761). pool(marth, -75.731638, 45.3803301). pool(jiggy, -75.7449645, 45.40431589). pool(yamaha, -75.7114829, 45.3993461). 我试着做以下事情,但没有成功: furthest(Lat-Long):- setof(Lat-L

我有一个包含这些参数的事实列表:名称、经度、纬度。我想写一个只对纬度排序的谓词。 这是我的部分事实

pool(roy, -75.702744, 45.4089761).
pool(marth, -75.731638, 45.3803301).
pool(jiggy, -75.7449645, 45.40431589).
pool(yamaha, -75.7114829, 45.3993461).
我试着做以下事情,但没有成功:

 furthest(Lat-Long):- setof(Lat-Long, pool(_, Long, Lat), [Lat-Long|_]).
我该如何解决这个问题?这行吗

pool(roy, -75.702744, 45.4089761).
pool(marth, -75.731638, 45.3803301).
pool(jiggy, -75.7449645, 45.40431589).
pool(yamaha, -75.7114829, 45.3993461).

my_sort:-
findall(forsort(Lat,Name),pool(Name,Long,Lat),List),
msort(List,Sorted),
write(Sorted).

    ?- my_sort.
[forsort(45.3803301,marth),forsort(45.3993461,yamaha),forsort(45.40431589,jiggy),forsort(45.4089761,roy)]
true.
以下手册摘录:

msort按术语的标准顺序对列表进行排序

标准条款顺序:

首先检查复合项的算术性,然后按字母顺序和字母顺序检查其函子名称 最后递归地处理他们的参数,首先是最左边的参数。 …但我没有幸运。这到底是什么意思?您需要更具体地说明所看到的错误。但是,看一下对setof/3的调用,您缺少了所需的通用量词:setoflan Long,Name^poolName,Long,Lat,[Lat Long | |]。