Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sicstus prolog Samsort中的设置顺序方法_Prolog_Sicstus Prolog - Fatal编程技术网

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