首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prolog查询忽略条件是否有条件。

prolog查询忽略条件是否有条件。
EN

Stack Overflow用户
提问于 2014-06-17 22:35:19
回答 1查看 78关注 0票数 1

首先,在Prolog方面,我是一个“菜鸟”,目前很难在网上找到适合我的技能水平的信息。总之,下面是我的代码示例:

代码语言:javascript
复制
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)。任何关于我哪里出错的指导都将不胜感激。

在做了建议的修改后,我遇到了另一个障碍:如何制定规则来确定一本书是借来的还是过期的?(代码如下)

代码语言:javascript
复制
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).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 22:45:52

在您的程序中,只有一个参数的谓词。这没有多大意义,因为你想建立事物之间的关系。比如目录号和书名。所以,相反,你想:

代码语言:javascript
复制
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).

或者,您可能需要一个单一的表:

代码语言:javascript
复制
number_book_author(222, lord_of_the_flies, golding_william).

现在你可以问:

代码语言:javascript
复制
?- number_book(222, X).
   X = lord_of_the_flies.

规则只是在稍后才起作用,比如说

代码语言:javascript
复制
number_book_author(Nr, B, A) :-
   number_book(Nr, B),
   author_book(A, B).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24274412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档