如何对变量Like
进行排序学生(5)。 学生(3)。 学生(2)。 学生(3)。 学生(6)。
我想制作让它们出现的功能
学生(2)。 学生(3)。 学生(3)。 学生(5)。 学生(6)。
答案 0 :(得分:1)
我首先使用findall(例如:How to create a list from facts in Prolog?)将所有这些事实收集到列表中,然后对此列表进行排序(例如:Sorting a list in Prolog,或者只使用内置的sort / 2谓词)。
(从我的手机发送)
答案 1 :(得分:0)
目前,他们不是正确的Prolog中的事实,你需要用小写字母写下:
student(5).
student(3).
% etc
然后,你可以做几件事:
?- findall(S, student(S), Students), msort(Students, Sorted).
(如其他答案所示)
如果您希望实际在数据库中对它们进行排序,并且不害怕在运行时更改数据库,则可以使用student/1
从数据库中删除所有abolish/1
并重新插入已排序的事实:
reorder_students :-
findall(S, student(S), Students),
msort(Students, Sorted), % do not remove duplicates
abolish(student/1),
forall(
member(M, Sorted),
assertz(student(M))
).
反复这样做并不是一个好主意!如果您有一个定期更改的学生数据库,您可能会考虑不将它们放在数据库中,而是使用例如library(assoc)中的关联列表