Prolog 序言:排序w.r.t.某些属性
我的数据库与此类似:Prolog 序言:排序w.r.t.某些属性,prolog,Prolog,我的数据库与此类似: % happy(Person,Happiness) happy(1,10). happy(2,5). happy(3,8). happy(4,1). 我想对人们的幸福进行分类 我对下面的代码进行了编码,它实现了我想要的。然而,在我看来,这很麻烦。有什么改进吗 ? - sortPeople(Ts). Ts = [1, 3, 2, 4]. 我的解决方案: getFirst([],R,R). getFirst([[H1,_]|T],F,R) :- append([H1
% happy(Person,Happiness)
happy(1,10).
happy(2,5).
happy(3,8).
happy(4,1).
我想对人们的幸福进行分类
我对下面的代码进行了编码,它实现了我想要的。然而,在我看来,这很麻烦。有什么改进吗
? - sortPeople(Ts).
Ts = [1, 3, 2, 4].
我的解决方案:
getFirst([],R,R).
getFirst([[H1,_]|T],F,R) :-
append([H1],F,R1),
getFirst(T,R1,R).
compareHappiness(X, [_,S1], [_,S2]) :- compare(X, S1, S2).
sortPeople(Ts) :-
findall([X,Y], happy(X,Y), List),
predsort(compareHappiness, List, SortedList),
getFirst(SortedList,[],Ts).
考虑使用更具描述性和声明性的谓词名称,例如:
person_happiness(1, 10).
person_happiness(2, 5).
person_happiness(3, 8).
person_happiness(4, 1).
对幸福进行排序,考虑使用内置的代码>键排序/ 2 < /代码>,这比
descending_happiness(Ps) :-
findall(H-P, person_happiness(P, H), HPs),
keysort(HPs, HPs1),
pairs_values(HPs1, Ps1),
reverse(Ps1, Ps).
查询示例:
?- descending_happiness(Ps).
Ps = [1, 3, 2, 4].
考虑使用更具描述性和声明性的谓词名称,例如:
person_happiness(1, 10).
person_happiness(2, 5).
person_happiness(3, 8).
person_happiness(4, 1).
对幸福进行排序,考虑使用内置的代码>键排序/ 2 < /代码>,这比
descending_happiness(Ps) :-
findall(H-P, person_happiness(P, H), HPs),
keysort(HPs, HPs1),
pairs_values(HPs1, Ps1),
reverse(Ps1, Ps).
查询示例:
?- descending_happiness(Ps).
Ps = [1, 3, 2, 4].
-以下是我得到的:
sort(Rez) :- findall([Happiness,PId],happy(PId,Happiness),List),
msort(List,LSorted),
findall(PersonID,member([_,PersonID],LSorted),Sorted),
reverse(Sorted,Rez).
-以下是我得到的:
sort(Rez) :- findall([Happiness,PId],happy(PId,Happiness),List),
msort(List,LSorted),
findall(PersonID,member([_,PersonID],LSorted),Sorted),
reverse(Sorted,Rez).
别那么笨重!我觉得还可以。没那么麻烦!我觉得还可以。