首先,在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).但是,当使用say ?- cat_num(222)查询KB时,book(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).发布于 2014-06-17 22:45:52
在您的程序中,只有一个参数的谓词。这没有多大意义,因为你想建立事物之间的关系。比如目录号和书名。所以,相反,你想:
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).https://stackoverflow.com/questions/24274412
复制相似问题