Отрицание как провал в Прологе - это процедурное поведение?

У меня есть маленький вопрос оотрицание как неудача на прологическом языке:

Это вопрос скорее теоретический, чем практический, потому что у меня есть четкое представление о том, как работает этот пример.

поэтому у меня есть следующая программа Prolog:

/* Fatti che specificano quali esseri sono degli animali: */
animal(cat).
animal(dog).
animal(frog).
animal(horse).
animal(viper).
animal(boa).
animal(python).

/* Fatti che specificano quali esseri sono dei serpenti: */
snake(viper).
snake(boa).
snake(python).

/* X è un serpente, fallisce ed impedisce il backtracking quindi
   il predicato likes(mary,X) risulta essere falso: */
likes(mary,X) :- snake(X),
                 !,
                 fail.

/* Se X è un animale allora a mary piace: */
likes(mary, X) :- animal(X).

В Прологе я могут просто сказать что-то вроде: "Мария любит всех животных, но не змей " и я должен сформулировать это так:Если X змея, то Мария нене люблю это. В противном случае, если X это животное, Мэри любит его

Прецедентная программа делает именно это, по правилу:

likes(mary,X) :- snake(X),
                 !,
                 fail.

Пролог проверяет, правда ли, что X это змея, накладывает сокращение, чтобы избежать возврата и вызвать сбой предиката.

Таким образом, еслизмеи (Х) являетсяПРАВДА программа форсирует провал и головы предикаталюбит (мэри, X) и навязывание обратного отслеживания исключает возможность выполнения другого правила в программе (этот ответ верен, потому что змея также является животным)

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

Так как:

Я должен наложить порядок предиката 2 (так, в некотором роде я говорю: если первый отказ, попробуйте второй).Но даже больше я говорю, что: если первое правило соответствует (X это змея), тогда выполнить принудительный отказ и не навязывает возврат.

Это мне кажется более близким к процессуальному значению, что классическое логическое значение ...

Это оно? Неужели в этих случаях Пролог использует процедурное поведение, чтобы преодолеть ограничение логики?

Ответы на вопрос(2)

Ваш ответ на вопрос