Prolog - 不确定书籍的规则

时间:2012-10-08 10:17:10

标签: prolog

我真的不知道如何处理规则,我讨厌prolog,我所做的就是,我列出了事实

使用结构化数据对象来表示书籍。描述a的信息 书是:

  • 标题
  • 作者
  • 类型
  • 页数

该类型应该是以下之一{犯罪,戏剧,喜剧,研究,小说, 参考}。

您可以将图书馆列为图书清单。 编写一套规则来推荐一套书籍:

  • 假期(书籍应少于400页,不得作为研究或参考 书)。
  • 修订版(书籍或超过300本的参考书 页)。
  • 文学阅读(戏剧书籍)。
  • 休闲(喜剧或小说的书籍)。

事实:

  • book(hamlet,shakes,drama,300)
  • book(map,osi,reference,100)
  • book(csi,jerry,crime,80)
  • 书(主持人,费雷尔,喜剧,200)
  • 书(java,jomo,study,400)
  • 书(圣经,耶稣,小说,600)

规则:它是如何做规则的,所有我都要问,例如,假期第一条规则的代码应该是:holidayPages(400,Y): - book(_,_,Y),400

1 个答案:

答案 0 :(得分:3)

chac已经铺平了道路。 Prolog规则的格式为:

Head :- Body.

对于头部,您可以选择化合物或原子。身体可以 一个Prolog查询。查询基本上来自:

- Invocations: Call some other rules with bound or unbound arguments
- Conditions: Unification =, Arithmetic =:=, <, etc.. Lexical @<, ==, etc..
- Connectives: And ,, Or ;, Not \+ etc..
- Everything else that is found in the handbook of your Prolog system.

如果您有规则的口头规范。首先寻找主要的调用, 然后是条件,最后是连接词。这是一个例子:

Holidays (book should be less than 400 pages and not be a study or reference book).

我明白了:

Main invocation: book(Title, Author, Genre, Pages)
Condition_1: Pages < 400
Condition_2: Genre = study
Condition_3: Genre = reference
Connectives: Condition_1, \+ (Condition_2 ; Condition_3)

如果我将所有这些放在一起,我会得到以下身体,你很容易 首先在顶层测试作为查询:

?- book(Title, Author, Genere, Pages), Pages < 400, \+ (Genre = study; Genre = reference).

现在你可以把它变成一个规则。注意使用下划线(_) 未使用的调用变量,否则Prolog系统会咆哮你 单身警告:

holidays(Title) :- 
     book(Title, _, Genre, Pages), 
     Pages < 400, 
     \+ (Genre = study; Genre = reference).

这是一个很好的功课,你有一个好老师。玩得开心。

再见