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

时间:2012-10-16 19:42:28

标签: scheme intervals overlap

所以基本上我已经对这种语言提出了一个问题,我从昨晚开始就一直在阅读这些文档。我还不知道什么,所以我想我会试试这个网站。

基本上这里的问题是:

我已经获得了几个日历日期和计划间隔的结构:

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

我不知道从哪里开始。如果有人能为我解决这个问题,那么我可以完成这个问题,我将不胜感激。非常感谢!

2 个答案:

答案 0 :(得分:3)

编写程序时,一般的好方法是将问题分解为更易于管理的问题。因此,在解决比较两个区间的问题之前,请尝试解决比较两个日历日期的简单问题。给定两个日期ab,尝试编写一个函数,如果ab之前,则返回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?构建overlap?。特别要考虑这一点:如果两个区间重叠,那么一个的结束日期另一个的开始日期之前。

最后,考虑边缘情况 - 例如,(1月4日至3月6日)和(3月6日至12月3日),您希望程序执行什么操作?这些间隔是否重叠?

快乐的编码!

PS - 如果您需要更多帮助,请不要害怕。我故意模糊,因为我认为给你提示会比在你面前解决方案更好 - 这样你就不会学到任何东西。

答案 1 :(得分:1)

要添加Ord的优秀建议,如果您正在寻找更多基本信息:define-struct意味着什么?如何编写使用日期的函数? - 然后我建议您查看(免费,在线)教科书How To Design Programs, version 2e。您似乎对第2.5节“添加结构”感兴趣,但是如果不阅读之前的部分,可能很难理解本节。

祝你好运!