【问题标题】:Prolog: Difference relation between two objectsProlog:两个对象之间的差异关系
【发布时间】:2017-06-01 12:34:33
【问题描述】:

我会诚实说这是家庭作业,但我非常需要帮助。

我是 Prolog 的新手,来自 C++ 和 Javascript,无论我多么努力,我就是不明白。

我应该做的是能够找到两个日期之间的差异(假设非闰年)。

基本上我有一个知识库,其中包含如下信息:

   object(A, B).
   object(A, B).
    ...

其中 A 代表月份,B 代表该月的总天数。 (例如对象(1, 31)。)

我应该用于输入的表达式是这样的: 差异(对象(A,B),对象(A,B),N)。 (N = 对象之间的差异)。

我尝试了一些不同的方法(而且我知道这不是正确的做法),但当时无法更进一步:

difference(object(A,B), object(A,B),N):-
    days(M,D), days(M,D),
    Y = 365-D,
    N is Y.

我不明白如何让这两个对象注册为我可以操纵的单独事物,因此继续解决问题。

有人可以请指点我正确的方向吗?

谢谢

家庭作业问题(按要求)。 假设存在描述多少天的天数关系 非闰年的每个日历月。

days(1,31).
days(2,28).

(等等)。

结构 dateObject(M, D) 描述了一个日期。例如 dateObject(6,5) 表示 6 月 5 日。 写出关系差(From, To, N),其中N是开始之间的天数 日期从和结束日期到。从日期不包括在计数中。为了 示例:

?- difference(dateobject(2,1),dateobject(2,2),N).
N = 1.

如果日期中的日期或月份值无效(例如 dateobject(4,31)、dateobject(13,1),则 返回的 N 值应为 -1。如果 From 日期晚于 To,则 N 也应返回 -1 错误值。

【问题讨论】:

  • “对象之间的差异”是什么意思?
  • 我不明白您所说的“让两个对象注册为我可以操作的单独事物”是什么意思?
  • @Enigmativity 基本上,这些对象代表一个月中的几天:days(1, 31)。差异(日期对象(4,30),日期对象(5,15),N)。
  • 是的,我明白这一点。 “对象之间的差异”是什么意思?
  • @Enigmativity 区别在于两个日期对象之间的天数。

标签: prolog


【解决方案1】:

这是一个非常糟糕的解决方案 - 我相信比我更聪明的人会想出更好的解决方案。

?- difference(dateobject(1,28),dateobject(6,1),N),write(N),nl.

days(1,31).
days(2,28).
days(3,31).
days(4,30).
days(5,31).
days(6,30).
days(7,31).
days(8,31).
days(9,30).
days(10,31).
days(11,30).
days(12,31).

daysbetween(M,FD,M,TD,N) :- !, N is TD - FD.
daysbetween(FM,FD,TM,TD,N) :-
    days(FM,D),
    FM2 is FM + 1,
    daysbetween(FM2,FD,TM,TD,N2),
    N is D + N2.

difference(dateobject(FM,FD),dateobject(TM,TD),N) :-
    TM >= FM,
    FD >= 1,
    days(FM,FDM),
    FD =< FDM,
    TD >= 1,
    days(TM,TDM),
    TD =< TDM,
    daysbetween(FM,FD,TM,TD,N),
    N > 0,
    !.
difference(_,_,-1).

【讨论】:

  • 我会尽快测试并回复您。不要说这很糟糕,它比我想出的任何东西都要好,你不知道我多么感谢你在这里给我的所有帮助。回到我的电脑后将进行测试
  • 先生,您是名副其实的传奇。
猜你喜欢
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2021-10-16
  • 2013-04-12
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多