Я пытаюсь сравнить S1 с A1, S2 с A2, ..., S5 с A5 и получить общее количество пар, которые соответствуют друг другу. Но интерпретатор показывает «синтаксическая ошибка, ожидаемый оператор». Есть ли простой подход для решения этой проблемы и что не так с моим кодом? Благодаря!Ошибка синтаксиса: ожидаемый оператор при попытке сравнения
grade(S1, S2, S3, S4, S5, A1, A2, A3, A4, A5, N):-
S1 = A1, grade2(S2, S3, S4, S5, A2, A3, A4, A5, N+1).
grade(S1, S2, S3, S4, S5, A1, A2, A3, A4, A5, N):-
\+ S1=A1, grade2(S2, S3, S4, S5, A2, A3, A4, A5, N).
grade2(S2, S3, S4, S5, A2, A3, A4, A5, N):-
S2=A2, grade3(S3, S4, S5, A3, A4, A5, N+1).
grade2(S2, S3, S4, S5, A2, A3, A4, A5, N):-
\+ S2=A2, grade3(S3, S4, S5, A3, A4, A5, N).
grade3(S3, S4, S5, A3, A4, A5, N):-
S3=A3, grade4(S4, S5, A4, A5, N+1).
grade3(S3, S4, S5, A3, A4, A5, N):-
\+ S3=A3, grade4(S4, S5, A4, A5, N).
grade4(S4, S5, A4, A5, N):-
S4=A4, grade5(S5, A5, N+1).
grade4(S4, S5, A4, A5, N):-
\+ S4=A4, grade5(S5, A5, N).
grade5(S5, A5, N):-
S5=A5, N is 1.
grade5(S5, A5, N):-
\+ S5=A5, N is 0.
Вы также можете использовать хвостовую рекурсию, если используете ограниченные ограничения вашей системы (вам не нужен дополнительный аргумент). Если вы пишете «N # = N0 + Add», вы можете свободно перемещать цель до рекурсивного вызова.Если оценки являются целыми числами, вы также можете использовать переопределение ограничений, например 'S # = A # <==> Добавить' вместо не декларативного использования if/then/else. Это позволяет использовать предикат во всех направлениях. – mat