Scheme 检查方案中是否有2个间隔重叠

Scheme 检查方案中是否有2个间隔重叠,scheme,intervals,overlap,Scheme,Intervals,Overlap,所以基本上,我被问到了一个关于这种语言的问题,从昨晚开始我就一直在阅读文档。我什么都不知道,所以我想我应该试试这个网站 基本上,这里的问题是: 我在scheme中得到了日历日期和间隔的几种结构: (define-struct cal (month day)) (define-struct interval (start end)) 然而,我被要求检查两个不同的间隔是否相互重叠。例如: If I have dates March 12th - March 14th in

所以基本上,我被问到了一个关于这种语言的问题,从昨晚开始我就一直在阅读文档。我什么都不知道,所以我想我应该试试这个网站

基本上,这里的问题是:

我在scheme中得到了日历日期和间隔的几种结构:

    (define-struct cal (month day))

    (define-struct interval (start end))
然而,我被要求检查两个不同的间隔是否相互重叠。例如:

    If I have dates March 12th - March 14th in my first interval, 
    but in my second interval I have the dates March 13th - March 2th
    (overlap? int1 int2) would return true.

    However if I have dates March 12th - March 14th in my first interval,
    but I have March 15th - March 18th in my second interval
    (overlap? int1 int2) would return false.

我不知道从哪里开始。如果有人能帮我解决这个问题,我会很感激的。非常感谢

一般来说,编写程序时的一个好方法是将问题分解为更易于管理的问题。因此,在解决比较两个时间间隔的问题之前,请尝试解决比较两个日历日期的简单问题。给定两个日期
a
b
,尝试编写一个函数,如果
a
b
之前,则返回true,否则返回false。所以

; date1 is January 5, date2 is February 6
(before? date1 date2) ; returns true
; date1 is January 5, date2 is January 2
(before? date1 date2) ; return false
接下来,考虑如何使用
before?
构建
重叠?
。特别地,考虑这一点:如果两个间隔不重叠,则一个结束日期在另一个间隔的开始日期之前。

最后,考虑边缘情况——如果你给出的程序,例如,(1月4日到3月6日)和(3月6日到12月3日),你希望你的程序做什么?这些间隔是否重叠

快乐编码


如果你需要更多的帮助,不要害怕问。我故意含糊其辞,因为我认为给你一些提示要比在你面前简单地给出一个解决方案要好——这样你就什么都学不到了。

一般来说,编写程序时的一个好方法是将问题分解成更易管理的问题。因此,在解决比较两个时间间隔的问题之前,请尝试解决比较两个日历日期的简单问题。给定两个日期
a
b
,尝试编写一个函数,如果
a
b
之前,则返回true,否则返回false。所以

; date1 is January 5, date2 is February 6
(before? date1 date2) ; returns true
; date1 is January 5, date2 is January 2
(before? date1 date2) ; return false
接下来,考虑如何使用
before?
构建
重叠?
。特别地,考虑这一点:如果两个间隔不重叠,则一个结束日期在另一个间隔的开始日期之前。

最后,考虑边缘情况——如果你给出的程序,例如,(1月4日到3月6日)和(3月6日到12月3日),你希望你的程序做什么?这些间隔是否重叠

快乐编码


如果你需要更多的帮助,不要害怕问。我故意含糊其辞,因为我认为给你一些提示比在你面前简单地给出一个解决方案要好——这样你就什么也学不到了。

如果你想了解更多的基本信息,请补充Ord的优秀建议:定义结构意味着什么?如何编写使用日期的函数?--然后我建议您看看(免费、在线)教科书。看起来您对第2.5节“添加结构”很感兴趣,但是如果不阅读前面的内容,可能很难理解这一节


祝你好运

如果您想了解更多的基本信息,请补充Ord的优秀建议:定义结构意味着什么?如何编写使用日期的函数?--然后我建议您看看(免费、在线)教科书。看起来您对第2.5节“添加结构”很感兴趣,但是如果不阅读前面的内容,可能很难理解这一节


祝你好运

要回答您的1月4日至3月6日和3月6日至12月3日,如果两个时间间隔中有任何日期相同,则它们都被视为重叠,因此返回true。要回答您的1月4日至3月6日和3月6日至12月3日,如果两个时间间隔中有任何日期相同,则回答“是”,它们都被认为是重叠的,因此它将返回真值。