首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PROLOG中的谓词排序

PROLOG中的谓词排序
EN

Stack Overflow用户
提问于 2022-07-17 16:21:51
回答 2查看 133关注 0票数 0

我有一些谓词

代码语言:javascript
运行
复制
p1( 301, 1, 2 ).
p2( 201, 5, 2 ).
p3( 501, 1, 5 ).
p4( 401, 1, 4 ).

我希望根据第3子句(上升顺序)对它们进行数字排序,如果它们的值相同,则根据第2子句(降序)对它们进行排序。

代码语言:javascript
运行
复制
p2( 201, 5, 2 ).
p1( 301, 1, 2 ).
p4( 401, 1, 4 ).
p3( 501, 1, 5 ).

我是prolog的新手,有什么函数可以对谓词进行排序吗?

EN

回答 2

Stack Overflow用户

发布于 2022-07-18 08:44:29

使用https://www.swi-prolog.org/pldoc/man?predicate=order_by/2

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
?- 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).
票数 0
EN

Stack Overflow用户

发布于 2022-07-17 23:44:32

代码语言:javascript
运行
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73013457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档