【问题标题】:Checking if 2 intervals overlap in Scheme检查Scheme中的2个间隔是否重叠
【发布时间】:2012-10-16 19:42:27
【问题描述】:

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

基本上这是什么问题:

我已经获得了几种日历日期结构和方案间隔:

    (define-struct cal (month day))

    (define-struct interval (start end))

但是,我被要求检查 2 个不同的间隔是否相互重叠。一个例子:

    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.

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

【问题讨论】:

    标签: scheme intervals overlap


    【解决方案1】:

    一般来说,编写程序的一个好方法是将问题分解为更易于管理的问题。因此,在解决比较两个间隔的问题之前,请尝试解决比较两个日历日期的简单问题。给定两个日期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 月 4 日 - 3 月 6 日和 3 月 6 日 - 12 月 3 日,是的,如果两个时间间隔中的任何日期相同,则它们都被视为重叠,因此它将返回 true。
    【解决方案2】:

    如果您正在寻找更多基本信息,补充 Ord 的出色建议:define-struct 是什么意思?我如何编写一个使用日期的函数?--那么我建议你看看(免费,在线)教科书How To Design Programs, version 2e。看起来您对第 2.5 节“添加结构”很感兴趣,但如果不阅读前面的内容,可能很难理解本节。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-02
      • 2016-03-28
      • 2021-10-12
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多