Пролог возвращает определенные перестановки - PullRequest
0 голосов
/ 21 мая 2018

у меня есть расписание предикатов (A, B, C), которое возвращает возможные перестановки в списках A, B, C с возвратом назад

?- schedule(A,B,C).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216] ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216] ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217] ?

У меня также есть предикат schedule_errors (A, B, C,E) который возвращает ошибки (не говоря уже о том, что такое ошибки) из списков A, B, C и E.

?- schedule_errors([im204, im209, im210], [im212, im214, im217], [im216, im218]).
E = 4 ?

В моем новом предикате

schedule_all_errors(A,B,C,E):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E).

он возвращает возможные перестановки пос номером ошибки

?- schedule_all_errors(A,B,C,E).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216]
E = 14 ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216]
E = 6 ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217]
E = 12 ?

Мне было интересно, есть ли способ, которым я могу вернуть только перестановки с нулевыми ошибками.(или не возвращать любые перестановки, ошибки которых отличаются от 0)

1 Ответ

0 голосов
/ 21 мая 2018

Просто добавьте это условие в конце

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E),
   E = 0.

или

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,0).

Будет ли работать второе, зависит от определения schedule_errors.

...