Sicstus prolog Samsort中的设置顺序方法
我正在尝试对一个列表进行排序,例如Sicstus prolog Samsort中的设置顺序方法,prolog,sicstus-prolog,Prolog,Sicstus Prolog,我正在尝试对一个列表进行排序,例如书籍=[[5,1,科学,24,32018],[6,1,数学,24,32019],[4,2,科学,24,52019],[6,2,科学,23,32019],[3,1,数学,24,32020]。我想根据每个元素的第5个值来排列这个列表。我试着用 samsort(sortDateBooks, Books, Output). sortDateBooks(Book1,Book2):-nth0(5,Book1, Date1),nth0(5,Book2, Date2), Dat
书籍=[[5,1,科学,24,32018],[6,1,数学,24,32019],[4,2,科学,24,52019],[6,2,科学,23,32019],[3,1,数学,24,32020]
。我想根据每个元素的第5个值来排列这个列表。我试着用
samsort(sortDateBooks, Books, Output).
sortDateBooks(Book1,Book2):-nth0(5,Book1, Date1),nth0(5,Book2, Date2), Date1<Date2.
samsort(sortdatebook、book、Output)。
sortDateBooks(Book1,Book2):-nth0(5,Book1,Date1),nth0(5,Book2,Date2),Date1我不确定这是否是您想要做的,如果是,那么这可能会给您一些提示:
1。此处收集日期将作为最终日期。它将搜索所有年份并将其放入列表中,例如[20192018201920192020]
2.sortBook(Sorted)谓词首先使用collectdates谓词查找所有年份,然后对它们进行排序。注意,在sort中我使用了@=嗯,我注意到我忘记了导入samsort库,并且由于它的使用方式,不会显示任何错误。非常感谢@Reema Q Khan提供了一个非常有用的解决方法和一个简单的解释。您似乎做了正确的事情。您的示例不完整,因此很难知道哪里出了问题。如果你用完整的代码和成绩单来更新它,你会更容易理解为什么你没有得到预期的结果。
sortBook(Sorted):-
Book=[[6,2,science,23,3,2019],[5,1,science,24,3,2018],[6,1,math,24,3,2019],[4,2,science,24,5,2019]
,[3,1,math,24,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,[B|L],W),
s(T,[B|L],List).
sortBook1(_,[],[]).
sortBook1(H,[B|L],[B|List]):-
member(H,B),
sortBook1(H,L,List).
sortBook1(H,[B|L],List):-
\+member(H,B),
sortBook1(H,L,List).
set([],[]).
set([H|T],[H|T2]):-
subtract(T,[H],T3),
set(T3,T2).
?-sortBook(Sorted).
Sorted = [[5, 1, science, 24, 3, 2018], [6, 2, science, 23, 3, 2019], [6, 1, math, 24, 3, 2019], [4, 2, science, 24, 5, 2019], [3, 1, math, 24, 3, 2020]]
false