Negacja jako porażka w Prologu jest zachowaniem proceduralnym?

Mam małe pytanie na tematnegacja jako porażka w języku Prolog:

Jest to pytanie bardziej teoretyczne niż praktyczne, ponieważ mam jasne, jak działa ten przykład.

więc mam następujący program 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).

W Prologu nie mogę po prostu powiedzieć czegoś takiego:„Mary kocha wszystkie zwierzęta, ALE NIE WĄŻ” i muszę to sformułować w ten sposób:„Jeśli X jest wężem, to Maryja go nie kocha. W przeciwnym razie, jeśli X jest zwierzęciem, Mary uwielbia to”

Program precedensowy robi dokładnie to samo, według zasady:

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

Prolog sprawdza, czy prawdą jest, że X jest wężem, nakłada cięcie, aby uniknąć cofania się i wymusić niepowodzenie orzeczenia.

W ten sposób, jeśliwąż (X) jestPRAWDZIWE program wymusza awarię także głowypolubienia (Mary, X) i narzucanie cofania się pozwala uniknąć możliwości wykonania drugiej reguły w programie (odpowiedź jest prawdziwa, ponieważ wąż jest również zwierzęciem)

Moje pytanie brzmi:wydaje mi się, że to użycie Prologu wykracza poza logiczny i deklaratywny paradygmat iw pewien sposób wpada w jakiś paradygmat proceduralny

Bo:

Muszę narzucić porządek 2 predykatu (więc w pewien sposób mówię: jeśli pierwszy nie powiedzie się, spróbuj drugiego).Ale jeszcze bardziej mówię, że: jeśli pierwsza reguła pasuje (X to wąż), wykonaj wymuszoną awarię i nie narzuca się.

Wydaje mi się, że jest to bliskie proceduralnemu znaczeniu tego klasycznego logicznego znaczenia ...

To jest to? Czy w tych przypadkach Prolog stosuje zachowanie proceduralne, aby pokonać ograniczenie logiki?

questionAnswers(2)

yourAnswerToTheQuestion