小编Dan*_*ick的帖子

Prolog对结构列表进行排序,算术错误

我一直试图对结构列表进行排序.

结构是这样的

% person(Name, Weight).
person(tom, 65).
person(dan, 70).
person(mike, 80).
Run Code Online (Sandbox Code Playgroud)

列表就是这样的

List = [person(tom, 65), person(dan, 70), person(mike, 80)].
Run Code Online (Sandbox Code Playgroud)

我想从最大的权重到最小的排序.像这样:

SortList = [person(mike, 80), person(dan, 70), person(tom, 65)].
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

sortListPerson([], []).
sortListPerson([person(NameP, WP)|Rest], Result):-
     sortListPerson(Rest, List),
     insertPerson(person(NameP, WP), List, Result).

insertPerson(person(NameP, WP), [], [person(NameP, WP)]).
insertPerson(person(NameP1, WP1), [person(NameP2, WP2)|Rest],   [person(NameP1, WP1)|List]):-
    integer(WP1),
    integer(WP2),
    WP1 @>= WP2,
    insertPerson(person(NameP2, WP2), Rest, List).
insertPerson(person(NameP1, WP1), [person(NameP2, WP2)|Rest], [person(NameP2, WP2)|List]):-
    integer(WP1),
    integer(WP2),
    WP1 @< WP2,
    insertInPlace(person(NameP1, WP1), Rest, List).
Run Code Online (Sandbox Code Playgroud)

我尝试过两个人的名单并且它有效:

?- sortListPerson([person(a, 10), …
Run Code Online (Sandbox Code Playgroud)

list prolog clpfd

1
推荐指数
2
解决办法
128
查看次数

标签 统计

clpfd ×1

list ×1

prolog ×1