2017-03-24 65 views
0

我对prolog非常陌生,一边学习一边我偶然发现了一个问题。我基本上有一些数据库的事实。它们是:通过列表检查的Prolog查询

book(year(1937), title([of,mice,and,men]), rating_out_of_ten(9)). 
book(year(2008), title([the,hunger,games]), rating_out_of_ten(8)). 

我正试图查询标题中包含“of”字样的图书。这是我想要的:

book(year, title, rating_out_of_ten), member(of, title). 

当我这样做时它返回false。有人可以请帮助。提前致谢。

回答

2

所以即时通讯新的序言太多,但我想我知道了解决方案:

  1. 在你查询你实际使用的是错误的断言,应该是“书”,而不是“电影”

  2. 查询应该是这样的:

book(X,title(Y),Z), member(of,Y)

参数必须大写(他们必须是变量),然而到达你必须使用列表的名称的变量列表中的元素,然后,像这样:

title(Y) 

所以你可以使用' Y'在成员谓词中。

+0

哈哈电影的事情是有点笔误我会解决它。谢谢! – jim

2

请记住,变量名称必须以大写字母(或下划线)开头。另外,当你的事实是book时,你真的在​​movie查询吗?

你可以尝试:

?- book(year(Y), title(T), rating_out_of_ten(R)), member(of, T). 
+0

是的,抱歉,这是一个错字..谢谢! – jim