Прежде всего, давайте укажем некоторые факты:
- Вы должны написать свою базу данных фактов, не используя заглавную букву в качестве первой буквы.Таким образом,
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"
Этот запрос довольно общий, вы можете быть более конкретным (например, указав имя).Надеюсь, поможет.