【问题标题】:Prolog : Comparing a range of timesProlog:比较一系列时间
【发布时间】: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 = 9FromM = 30Person = georgeToH = 11ToM = 0,这是我所期望的。如果您有多个数据库项目,它将提供多种解决方案。

标签: prolog gnu-prolog


【解决方案1】:

按照 mbratch 所说的,我更好地了解了 prolog 如何在数据库中运行,并且我能够轻松编写满足要求的比较逻辑。

想法是,如上所述调用 free(...),Person 接收列表中的第一个个体,所有传递的变量都接收数据。然后我可以对数据使用我的逻辑,如果所有逻辑都通过,则方法运行并返回正确的响应。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多