我对Prolog整体还是陌生的,我正在学习prolog查询。
我正在看本教程。 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).
我尝试了上面的代码,但返回“否”。我认为它仍然被评估为布尔值。但是,我希望该函数返回实际年龄。
答案 0 :(得分:2)
首先,让我们指出一些事实:
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).
因此,首先必须找到具有给定名称的人的ID,然后找到相应的年龄。查询:
?- age_of(Name,State,Age).
Age = "17",
Name = "Mike",
State = "CA"
此查询非常通用,您可以更具体(例如,指定名称)。希望能帮助到你。