Prolog Query: возвращаемое значение на основе фактов - PullRequest
0 голосов
/ 26 августа 2018

Я новичок в Прологе в целом и изучаю запрос на пролог.

Я смотрю на это руководство.http://www.cs.trincoll.edu/~ram/cpsc352/notes/prolog/factsrules.html и пытаюсь поиграть с собственной базой данных.

Person("Mike", "123456").   //Person(Name,ID)
Info("CA", "123456", "17"). //Info(State, ID, Age)

Что я пытаюсь сделать:

Я пытаюсь вернуть чей-то возраст по имени и состоянию,выполнив следующий запрос, он должен вернуть 17.

Age_Of(Name, State, N) :- Info(State, Person(Name, X), N).

Я попробовал приведенный выше код, и он возвращает «Нет».Я считаю, что это все еще оценивать как логическое значение.Однако я хочу, чтобы функция возвращала фактический возраст.

1 Ответ

0 голосов
/ 26 августа 2018

Прежде всего, давайте укажем некоторые факты:

  • Вы должны написать свою базу данных фактов, не используя заглавную букву в качестве первой буквы.Таким образом, Person("Mike", "123456"). должно быть person("Mike", "123456")., а Info("CA", "123456", "17"). должно быть info("CA", "123456", "17").
  • В прологе нет функций, а только предикаты, и их следует определять также с использованием заглавной буквы, поэтому Age_Of(Name, State, N) должно быть age_of(Name, State, N).
  • Даже если вы удалите все первые заглавные буквы, вы получите Singleton variables: [X] во время выполнения кода.Это означает, что вы определили переменную, в данном случае X, но нигде не использовали.В этом случае вам следует заменить каждую одноэлементную переменную на _ или добавить _ перед переменной (в данном случае _X).

Чтобы решить вашу проблему, вот решение:

person("Mike", "123456").   % person(Name,ID)
info("CA", "123456", "17"). % info(State, ID, Age)


age_of(Name, State, Age):-
   person(Name,ID),
   info(State, ID, Age).

Итак, сначала вы должны найти идентификатор человека с данным именем, а затем найти соответствующий возраст.Запрос:

?- age_of(Name,State,Age).
Age = "17",
Name = "Mike",
State = "CA"

Этот запрос довольно общий, вы можете быть более конкретным (например, указав имя).Надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...