2

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

基本上这里的问题是:

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

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

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

4

2 回答 2

3

编写程序时,一个好的方法通常是将问题分解为更易于管理的问题。因此,在解决比较两个间隔的问题之前,请尝试解决比较两个日历日期的简单问题。给定两个日期aand b,尝试编写一个函数,如果a是 before则返回 true b,否则返回 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 - 如果您需要更多帮助,请不要害怕询问。我故意含糊其辞,因为我认为给你提示会比在你面前摆出一个解决方案更好——那样你就不会学到任何东西。

于 2012-10-16T20:01:25.610 回答
1

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

祝你好运!

于 2012-10-16T20:43:22.797 回答