Я создал расписание предикатов (A, B, C), которое возвращает возможные перестановки в списках A, B, C с возвратом назад
| ?- schedule(A,B,C).
A = [im204,im212,im217]
B = [im209,im214,im218]
C = [im210,im216] ? ;
A = [im204,im212,im218]
B = [im209,im214,im217]
C = [im210,im216] ? ;
A = [im204,im212,im216]
B = [im209,im214,im218]
C = [im210,im217] ?
У меня также есть предикат schedule_score (A, B, C,S) который возвращает оценку (неважно, что означает оценка) из списков A, B, C в S.
| ?- score_schedule([im204,im209,im212],[im210,im214,im216],[im217,im218],S).
S = 578
В моем новом предикате
all_schedule_scores(A,B,C,S):-
schedule(A,B,C),
score_schedule(A,B,C,S).
он возвращает возможные перестановки посо счетом
| ?- all_schedule_scores(A,B,C,S).
A = [im204,im212,im217]
B = [im209,im214,im218]
C = [im210,im216]
S = 342 ? ;
A = [im204,im212,im218]
B = [im209,im214,im217]
C = [im210,im216]
S = 371 ? ;
A = [im204,im212,im216]
B = [im209,im214,im218]
C = [im210,im217]
S = 294 ?
Мне было интересно, есть ли способ, которым я могу вернуть только перестановки с максимальным счетом (или не вернуть любые перестановки, чей счет не максимальный).