如何解决Sicstus prolog Samsort 中的设置顺序方法
我正在尝试对 Books=[[5,1,science,24,3,2018],[6,math,2019],[4,2,5,23,[3,2020]]
等列表进行排序。我想根据每个元素的第 5 个值对这个列表进行排序。我尝试使用
samsort(sortDateBooks,Books,Output).
sortDateBooks(Book1,Book2):-nth0(5,Book1,Date1),nth0(5,Book2,Date2),Date1<Date2.
输出变量永远不会填充数据,原始列表也不会改变。
我觉得我没有正确声明 de order 谓词,但找不到任何示例。
感谢您的帮助。
解决方法
好吧,我注意到我忘记导入 samsort 库,并且由于它的使用方式,不会显示任何错误。非常感谢@Reema Q Khan 提供了非常有用的解决方法和简单的解释。
,我不确定这是否是您想要做的,如果是,那么这可能会给您一些提示:
1. 此处收集日期将充当 findall。它将搜索所有年份并将它们放入列表中,例如[2019,2018,2019,2020]。
2. sortBook(Sorted) 谓词首先使用 collectdates 谓词查找所有年份,然后对它们进行排序。请注意,在排序中我使用了 @=
3. s 谓词只需要每年,搜索信息并将其放入列表中。
的谓词每年都会检查每本书,因此这可能会导致额外的内容。 append 用于减少额外的括号,set predicate 简单地删除重复项(如果有)。
sortBook(Sorted):-
Book=[[6,2,science,23,3,2019],[5,1,24,2018],[6,math,[4,5,[3,2020]],collectdates(Book,Clist),sort(0,@=<,Clist,SList),s(SList,Book,Sorted1),append(Sorted1,Sorted2),set(Sorted2,Sorted).
collectdates([],[]).
collectdates([H|T],[Last|List]):-
last(H,Last),collectdates(T,List).
s([],_,[]).
s([H|T],[B|L],[W|List]):-
sortBook1(H,W),s(T,List).
sortBook1(_,[],[]).
sortBook1(H,[B|List]):-
member(H,B),sortBook1(H,L,List).
sortBook1(H,List):-
\+member(H,List).
set([],[]).
set([H|T],[H|T2]):-
subtract(T,[H],T3),set(T3,T2).
示例:
?-sortBook(Sorted).
Sorted = [[5,2020]]
false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。