Ответ в теме: Error: Free variable are not allowed in ‘not’ or ‘retractall’

#3475

Проблема заключается в том, что Visual Prolog не разрешает использование свободных переменных внутри операторов NOT и retractall. В вашем коде такой переменной является _Score, т.к. на момент выполнения выражений никакое значение ей не присвоено.

Решить проблему можно двумя способами.
Во-первых, в вашей задаче можно получить курс Петрова, а уже затем выполнить его сравнение:

student("petrov", Course, _Score),
NOT(Course = 2).

Во-вторых, можно добавить вспомогательный предикат, который будет перебирать студентов без учета их оценки (которая и создает свободную переменную) и использовать его в выражении NOT:

PREDICATES
  nondeterm student(name, course, score)
  nondeterm name_course_student(name, course)
CLAUSES 
  % ... your students
  name_course_student(Name, Course):-
  	student(Name, Course, _Score).
GOAL    
  NOT(name_course_student("petrov", 2)).