2014-06-17 53 views
1

首先,我是一个关于Prolog的'noob',并且目前很难找到适合我的技能水平的在线信息。 反正这里是我的代码示例:prolog查询忽略如果条件

book(brave_new_world). 
book(lord_of_the_flies). 
book(fight_club). 
book(wind_in_the_willows). 
book(the_hobbit). 
cat_num(111) :- book(brave_new_world). 
cat_num(222) :-book(lord_of_the_flies). 
cat_num(333) :- book(fight_club). 
cat_num(444) :- book(wind_in_the_willows). 
cat_num(555) :-book(the_hobbit). 
author(huxley_aldus) :- book(brave_new_world). 
author(golding_william) :- book(lord_of_the_flies). 
author(palahniuk) :- book(fight_club). 
author(palahniuk_chuck) :- book(fight_club). 
author(tolkien_jrr) :- book(the_hobbit). 
author_sur(palahniuk) :- book(fight_club). 
author_sur(golding) :- book(lord_of_the_flies). 
author_sur(huxley) :- book(brave_new_world). 
author_sur(grahame) :-book(wind_in_the_willows). 
author_sur(tolkien) :-book(the_hobbit). 
author_fore(aldus) :- book(brave_new_world). 
author_fore(william) :- book(lord_of_the_flies). 
author_fore(chuck) :- book(fight_club). 
author_fore(kenneth) :- book(wind_in_the_willows). 
author_fore(jrr) :-book(the_hobbit). 

但是查询时,KB用说 - cat_num(222),图书(X)?它不会返回我想要的结果(lord_of_the_flies)。任何指导我哪里去错了将不胜感激。

做了这些修改后,我又碰到了一个障碍:我该如何制定一个规则来确定一本书是借书还是逾期? (代码如下)

number_book(111, brave_new_world). 
number_book(222, lord_of_the_flies). 
number_book(333, fight_club). 
number_book(444, wind_in_the_willows). 
number_book(555, the_hobbit). 
author_book(huxley_aldus, brave_new_world). 
author_book(golding_william, lord_of_the_flies). 
author_book(palahniuk_chuck, fight_club). 
author_book(grahame_kenneth, wind_in_the_willows). 
author_book(tolkien_jrr, the_hobbit). 
author_fore_sur(huxley_aldus, aldus, huxley). 
author_fore_sur(golding_william, william, golding). 
author_fore_sur(palahniuk_chuck, chuck, palahniuk). 
author_fore_sur(grahame_kenneth, kenneth, grahame). 
author_fore_sur(tolkien_jrr, jrr, tolkien). 

id_sur_fore(1202, smith, john). 
id_sur_fore(1332, thompson, kevin). 
id_sur_fore(4556, anderson, edward). 
house_post_id(5, dh1_3pr, 1202). 
house_post_id(123, ne3_4ty, 1332). 
house_post_id(45, dh3_6kl, 4556). 

borrowed_id(333, 1202). 
borrowed_id(222, 1332). 
borrowed_id(555, 4556). 

loan_due_id(11_06_2014, 27_06_2014, 333). 
loan_due_id(15_06_2014, 01_07_2014, 222). 
loan_due_id(17_06_2014, 13_07_2014, 555). 

回答

1

在你的程序中,你只有一个参数的谓词。这没有多大意义,因为你想建立关系之间东西。像目录号和书名一样。因此,相反,你想:

number_book(111, brave_new_workd). 
number_book(222, lord_of_the_flies). 
... 
author_book(golding_william, lord_of_the_flies). 
... 
author_fore_sur(golding_william, william,golding). 

或者你可能要一个单表:

number_book_author(222, lord_of_the_flies, golding_william). 

现在,你可以问:

?- number_book(222, X). 
X = lord_of_the_flies. 

规则发挥作用只是到了后来,说

number_book_author(Nr, B, A) :- 
    number_book(Nr, B), 
    author_book(A, B). 
+0

谢谢,这是一个很大的帮助! – fleggle