【发布时间】:2013-10-19 01:54:54
【问题描述】:
简要说明,基本上,prolog 程序 (GNU Prolog) 的想法是搜索一个数据库,该数据库包含有可用时间段到一组时间(开始时间、结束时间)的人,并返回第一个可以见面的人那时。输入有语法
meeting(Person,slot(time(10,0),time(12,30)))
我有一个与上述匹配的谓词:
meeting(Person, slot(time(A,B),time(C,D))) :- %insert code
数据库条目如下所示:
free(george,slot(time(9,30),time(11,0)))
我卡住的地方是我不确定如何将数据库中的时间与调用会议谓词时输入的时间进行比较。不是在寻找免费的答案,只是想要一个正确的方向和一个好的例子:) 谢谢大家!
【问题讨论】:
-
这里有一些可以尝试的东西,您可以将其用作谓词中的一个想法:运行您的
gprolog,加载您的数据(free(...)项目)并输入:free( Person, slot(time(FromH, FromM), time(ToH, ToM))).。提出每个解决方案后,请按;。 -
这样我就得到了返回数据库中的第一个人,仅此而已。我了解 prolog 如何工作的非常基本的知识,知道它会查找查询的第一个匹配项,然后将该匹配项分配给“Person”变量。
-
如果您有多个数据库条目,如果您按
;,它应该依次为您提供每个条目,并为每个条目提供一个Person,一个开始时间小时(FromH),从每场比赛的时间分钟(FromM)等开始。如果你不明白,那就是有问题。练习的重点是,如果您想匹配时间,您将执行这样的查询来检查数据库中的每个时间。 -
我得到:meeting.pl:12-13:警告:用于 meeting/2 ann GNU Prolog 1.4.4 的单例变量 [A,B,C,D,FromH,FromM,ToH,ToM] (64 位)2013 年 4 月 24 日 16:00:30 使用 gcc 编译 Daniel Diaz 版权所有 (C) 1999-2013 Daniel Diaz | ?-;当我进入;我只是得到一个空白行,没有任何反应
-
你做错了,因为如果我把你的单行数据放入
gprolog,然后输入我给你的查询(free( Person, slot(time(FromH, FromM), time(ToH, ToM))).),然后我得到以下几行输出:FromH = 9、FromM = 30、Person = george、ToH = 11和ToM = 0,这是我所期望的。如果您有多个数据库项目,它将提供多种解决方案。
标签: prolog gnu-prolog