Prolog 检查列表是否已排序

Prolog 检查列表是否已排序,prolog,Prolog,我试图找到一种方法来检查列表是否从多到少排序。我找到了一种方法,按照以下规则以正确的方式检查它 ordered( [] ) . ordered( [_] ) . ordered( [X,Y|Z] ) :- X =< Y , ordered( [Y|Z] ) . 我想在查询中键入一个旅行者列表,并检查该列表是否按成本从多到少排序。如果列表已排序,我希望prolog返回true;如果列表未排序,则返回false。我已经尽力了,但仍然没有得到答案。有人能帮我吗 ?- chec

我试图找到一种方法来检查列表是否从多到少排序。我找到了一种方法,按照以下规则以正确的方式检查它

ordered( []      ) .
ordered( [_]     ) .
ordered( [X,Y|Z] ) :- X =< Y , ordered( [Y|Z] ) .
我想在查询中键入一个旅行者列表,并检查该列表是否按成本从多到少排序。如果列表已排序,我希望prolog返回true;如果列表未排序,则返回false。我已经尽力了,但仍然没有得到答案。有人能帮我吗

?- checkOrder([martin,lyla,michael,julia]). %example of query I want to type in prolog
true. %return I am expecting from above query

?- checkOrder([martin,lyla,michael,sam]). %example of query I want to type in prolog
false. %return I am expecting from above query

构建成本列表,然后重用代码:

checkOrder(Persons) :-
  findall(C, (member(P,Persons), travelto(P,_,_,C)), Costs),
  ordered(Costs).
但需要更改为ordered/1,因为现在它检查升序排序:

...  :- X >= Y , ...
否则,请在订购/1之前冲销/2成本

或者,仅举例说明备选方案(订购/1不需要):


构建成本列表,然后重用代码:

checkOrder(Persons) :-
  findall(C, (member(P,Persons), travelto(P,_,_,C)), Costs),
  ordered(Costs).
但需要更改为ordered/1,因为现在它检查升序排序:

...  :- X >= Y , ...
否则,请在订购/1之前冲销/2成本

或者,仅举例说明备选方案(订购/1不需要):