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

UptoLike

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

43
Теперь усложним задачу с целью дать возможность пользо-
вателю формулировать вопрос грамматически правильно, а также
для того, чтобы вводить любые виды отношений. Факты мы при-
ведем к универсальному виду f(объект1,отношение,объект2), а
также введем синонимы для имен объектов и отношений. В дан-
ном случае под термином синоним будем понимать как
граммати-
ческое видоизменение слова, так и другое слово, которое мы счи-
таем семантически эквивалентным исходному.
При данной организации БЗ и приведенном ниже алгоритме
обработки запроса имена объектов и отношений, множества сино-
нимов различных отношений и множество синонимов различных
объектов не должны пересекаться. Например, если есть факты
ф("кирилл","хобби","шахматы")},
ф("кирилл","любить","татьяна")},
соб("татьяна",["татьяну",...])
сот("хобби",["нравится","увлекается","любит","любить"])
сот("любить",["любит"]),
то на вопрос: "кирилл любит татьяну" вы получите ответ
"Нет!", поскольку в качестве имени отношения будет выбрано
"хобби".
Состав базы знаний.
ф("кирилл","хобби","хоккей")
ф("петров","хобби","лыжи")
ф("ирина","хобби","кино")
ф
("татьяна","хобби","гимнастика")
ф("кирилл","хобби","гимнастика")
ф("петров","любить","ирина")
ф("ирина","любить","кирилл")
ф("кирилл","любить","татьяна")
соб("кирилл",["кириллу","кириллом","кирилла","кирилле"])
соб("петров",["петрову","петровым","петрова","петрове"])
соб("ирина",["ирине","ириной","ирины","ирину"])
соб("гимнастика",["гимнастикой","гимнастики","гимнастикой",
"гимнастике","гимнастику"])
соб("татьяна",["татьяне","татьяной","татьяны","татьяну
"])
сот("хобби",["нравится","увлекается"])
сот("любить",["любит"])
44
Текст программы.
domains
список=symbol*
facts – f1
ф(symbol,symbol,symbol)
соб(symbol,список)
сот(symbol,список)
кто(symbol)
что(symbol)
отн(symbol)
временно(symbol)
predicates
nondeterm repeat
nondeterm ответить(symbol)
ответ1(symbol,symbol,symbol)
ответ2(symbol,symbol)
ответ3(symbol,symbol)
ответ4(symbol)
ответ5(symbol,symbol)
ответ6(symbol)
ответ7(symbol)
анализ_КтоОтношениеЧто(symbol)
nondeterm поиск_кто(symbol)
nondeterm поиск_что(symbol)
nondeterm поиск_отношения(symbol)
искать_синоним_кто(symbol)
искать_синоним_отношения(symbol)
искать_синоним_что(symbol)
загрузить_список(список)
спросить
goal
consult("hobbyNew2.dbs",f1),
repeat,
спросить,
retractall(кто(_)),
retractall(что(_)),
retractall(отн(_)),
      Теперь усложним задачу с целью дать возможность пользо-       Текст программы.
вателю формулировать вопрос грамматически правильно, а также        domains
для того, чтобы вводить любые виды отношений. Факты мы при-         список=symbol*
ведем к универсальному виду f(объект1,отношение,объект2), а         facts – f1
также введем синонимы для имен объектов и отношений. В дан-         ф(symbol,symbol,symbol)
ном случае под термином синоним будем понимать как граммати-        соб(symbol,список)
ческое видоизменение слова, так и другое слово, которое мы счи-     сот(symbol,список)
таем семантически эквивалентным исходному.                          кто(symbol)
      При данной организации БЗ и приведенном ниже алгоритме        что(symbol)
обработки запроса имена объектов и отношений, множества сино-       отн(symbol)
нимов различных отношений и множество синонимов различных           временно(symbol)
объектов не должны пересекаться. Например, если есть факты          predicates
      ф("кирилл","хобби","шахматы")},                               nondeterm repeat
      ф("кирилл","любить","татьяна")},                              nondeterm ответить(symbol)
      соб("татьяна",["татьяну",...])                                ответ1(symbol,symbol,symbol)
      сот("хобби",["нравится","увлекается","любит","любить"])       ответ2(symbol,symbol)
      сот("любить",["любит"]),                                      ответ3(symbol,symbol)
      то на вопрос: "кирилл любит татьяну" вы получите ответ        ответ4(symbol)
"Нет!", поскольку в качестве имени отношения будет выбрано          ответ5(symbol,symbol)
"хобби".                                                            ответ6(symbol)
      Состав базы знаний.                                           ответ7(symbol)
      ф("кирилл","хобби","хоккей")                                  анализ_КтоОтношениеЧто(symbol)
      ф("петров","хобби","лыжи")                                    nondeterm поиск_кто(symbol)
      ф("ирина","хобби","кино")                                     nondeterm поиск_что(symbol)
      ф("татьяна","хобби","гимнастика")                             nondeterm поиск_отношения(symbol)
      ф("кирилл","хобби","гимнастика")                              искать_синоним_кто(symbol)
      ф("петров","любить","ирина")                                  искать_синоним_отношения(symbol)
      ф("ирина","любить","кирилл")                                  искать_синоним_что(symbol)
      ф("кирилл","любить","татьяна")                                загрузить_список(список)
      соб("кирилл",["кириллу","кириллом","кирилла","кирилле"])      спросить
      соб("петров",["петрову","петровым","петрова","петрове"])      goal
      соб("ирина",["ирине","ириной","ирины","ирину"])               consult("hobbyNew2.dbs",f1),
      соб("гимнастика",["гимнастикой","гимнастики","гимнастикой",   repeat,
      "гимнастике","гимнастику"])                                   спросить,
      соб("татьяна",["татьяне","татьяной","татьяны","татьяну"])     retractall(кто(_)),
      сот("хобби",["нравится","увлекается"])                        retractall(что(_)),
      сот("любить",["любит"])                                       retractall(отн(_)),

                               43                                                          44