Программирование в Логике. Чанышев О.Г. - 3 стр.

UptoLike

Составители: 

5
7. темный(Z):-черный(Z).
8. темный(Z):-коричневый(Z).
Вопрос:
темный(X),большой(X).
Шаги вычисления:
1) Исходный список целевых утверждений: темный(X),
большой(X).
2) Просмотр всей программы от начала к концу и поиск
предложения, у которого голова сопоставима с первым целевым
утверждением: темный(X).
Найдено предложение 7: темный(Z):-черный(Z).
Замена первого целевого утверждения конкретизированным
телом предложения 7 – порождение нового списка целевых ут-
верждений: черный(X), большой(X).
3)
Просмотр программы для нахождения предложения, со-
поставимого с черный(X). Найдено предложение 5: черный(кот).
У этого предложения нет тела, поэтому список целей при соответ-
ствующей конкретизации сокращается до большой(кот).
4) Просмотр программы в поисках этой цели завершается
неуспехом, и происходит возврат к шагу 3 и отмены конкретиза-
ции X=кот. Список целей вновь:
черный(X), большой(X).
Продолжение просмотра ниже предложения 5. Ни одно
предложение не найдено. Возврат к шагу 2 и продолжение про-
смотра ниже предложения 7. Найдено предложение 8: темный(Z):-
коричневый(Z). Замена первой цели в списке на коричневый(X)
дает: коричневый(X), большой(X).
5) Просмотр программы для обнаружения предложения, со-
поставимого с коричневый(X) дает коричневый(медведь). У этого
предложения нет
тела, поэтому список целей уменьшается до
большой(медведь).
6) Просмотр программы и обнаружение предложения боль-
шой(медведь).
У него нет тела, поэтому список целей становится пустым.
Это указывает на успешное завершение, а соответствующая кон-
кретизация переменных: X=медведь.
6
Забегая немного вперед, представляю запись этой же про-
граммы на Turbo Prolog'е. (Если используете VP v.5.2, можете пи-
сать по-русски все, за исключением типов встроенных перемен-
ных, наименований встроенных предикатов, наименований разде-
лов программы).
/* Раздел объявления предикатов*/
predicates
большой(string)
черный(string)
коричневый(string)
серый(string)
темный(string)
маленький(string)
/*Главная цель-вопрос*/
goal
темный(X), большой(X),
write(X).
/*Правила*/
clauses
большой(медведь).
большой(слон).
маленький(кот).
коричневый(медведь).
черный(кот).
серый(слон).
темный(Z):-черный(Z).
темный(Z):-коричневый(Z).
Можно изменить программу: записать факты в специальный
файл (с любым именем), а затем загрузить их в раздел фактов:
facts – f1
большой(string)
маленький(string)
коричневый(string)
черный(string)
темный(string)
серый(string)
     7. темный(Z):-черный(Z).                                           Забегая немного вперед, представляю запись этой же про-
     8. темный(Z):-коричневый(Z).                                 граммы на Turbo Prolog'е. (Если используете VP v.5.2, можете пи-
                                                                  сать по-русски все, за исключением типов встроенных перемен-
     Вопрос:
                                                                  ных, наименований встроенных предикатов, наименований разде-
     темный(X),большой(X).
                                                                  лов программы).
     Шаги вычисления:                                                  /* Раздел объявления предикатов*/
                                                                       predicates
      1) Исходный список целевых утверждений: темный(X),
                                                                       большой(string)
большой(X).
                                                                       черный(string)
      2) Просмотр всей программы от начала к концу и поиск
                                                                       коричневый(string)
предложения, у которого голова сопоставима с первым целевым
                                                                       серый(string)
утверждением: темный(X).
                                                                       темный(string)
      Найдено предложение 7: темный(Z):-черный(Z).
                                                                       маленький(string)
      Замена первого целевого утверждения конкретизированным
                                                                       /*Главная цель-вопрос*/
телом предложения 7 – порождение нового списка целевых ут-
                                                                       goal
верждений: черный(X), большой(X).
                                                                       темный(X), большой(X),
      3) Просмотр программы для нахождения предложения, со-
                                                                       write(X).
поставимого с черный(X). Найдено предложение 5: черный(кот).
                                                                       /*Правила*/
У этого предложения нет тела, поэтому список целей при соответ-
                                                                       clauses
ствующей конкретизации сокращается до большой(кот).
                                                                       большой(медведь).
      4) Просмотр программы в поисках этой цели завершается
                                                                       большой(слон).
неуспехом, и происходит возврат к шагу 3 и отмены конкретиза-
                                                                       маленький(кот).
ции X=кот. Список целей вновь: черный(X), большой(X).
                                                                       коричневый(медведь).
      Продолжение просмотра ниже предложения 5. Ни одно
                                                                       черный(кот).
предложение не найдено. Возврат к шагу 2 и продолжение про-
                                                                       серый(слон).
смотра ниже предложения 7. Найдено предложение 8: темный(Z):-
                                                                       темный(Z):-черный(Z).
коричневый(Z). Замена первой цели в списке на коричневый(X)
                                                                       темный(Z):-коричневый(Z).
дает: коричневый(X), большой(X).
      5) Просмотр программы для обнаружения предложения, со-            Можно изменить программу: записать факты в специальный
поставимого с коричневый(X) дает коричневый(медведь). У этого     файл (с любым именем), а затем загрузить их в раздел фактов:
предложения нет тела, поэтому список целей уменьшается до               facts – f1
большой(медведь).                                                       большой(string)
      6) Просмотр программы и обнаружение предложения боль-             маленький(string)
шой(медведь).                                                           коричневый(string)
      У него нет тела, поэтому список целей становится пустым.          черный(string)
Это указывает на успешное завершение, а соответствующая кон-            темный(string)
кретизация переменных: X=медведь.                                       серый(string)

                              5                                                                  6