我有一些谓词
p1( 301, 1, 2 ).
p2( 201, 5, 2 ).
p3( 501, 1, 5 ).
p4( 401, 1, 4 ).我希望根据第3子句(上升顺序)对它们进行数字排序,如果它们的值相同,则根据第2子句(降序)对它们进行排序。
p2( 201, 5, 2 ).
p1( 301, 1, 2 ).
p4( 401, 1, 4 ).
p3( 501, 1, 5 ).我是prolog的新手,有什么函数可以对谓词进行排序吗?
发布于 2022-07-18 08:44:29
使用https://www.swi-prolog.org/pldoc/man?predicate=order_by/2
p(301, 1, 2).
p(201, 5, 2).
p(501, 1, 5).
p(401, 1, 4).
test_sort :-
forall(
order_by([asc(C), desc(B)],
p(A, B, C)
),
assertz(p_sorted(A, B, C))
).结果在swi-prolog:
?- listing(p_sorted).
:- dynamic p_sorted/3.
p_sorted(201, 5, 2).
p_sorted(301, 1, 2).
p_sorted(401, 1, 4).
p_sorted(501, 1, 5).发布于 2022-07-17 23:44:32
d(p2, 201, 5, 2 ).
d(p1, 301, 1, 2 ).
d(p4, 401, 1, 4 ).
d(p3, 501, 1, 5 ).
sortpred(A,B,C):- ..... A='<' .... A='>' ... A='='.
:- findall(d(A,B,C,D),d(A,B,C,D),Ls),
predsort(sortpred,Ls,Rs), writeln(Rs).
:- halt.如果要创建排序谓词,请查看以下内容:
URLhttps://www.cp.eng.chula.ac.th/~prabhas//teaching/dsys/2004/quick-prolog.htm
https://stackoverflow.com/questions/73013457
复制相似问题