-7

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

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

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

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

您可以将图书馆表示为书籍列表。写一套推荐书籍的规则:

  • 假期(书应少于 400 页,而不是学习或参考书)。
  • 修订(用于学习的书或超过 300 页的参考书)。
  • 文学阅读(戏剧书籍)。
  • 休闲(喜剧或小说的书籍)。

事实:

  • 书(小村庄,震动,戏剧,300)
  • 书(地图,osi,参考,100)
  • 书(csi,杰瑞,犯罪,80)
  • 书(主播,费雷尔,喜剧,200)
  • 书(java,jomo,学习,400)
  • 书(圣经,耶稣,小说,600)

规则:它如何执行规则,都是我在问的问题,例如,对于假期,第一条规则的代码是否应该是:holidayPages(400,Y) :- book(_, _, Y),400

4

1 回答 1

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).

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

再见

于 2012-10-08T11:29:08.703 回答