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

プログラムを書くときの一般的な良いアプローチは、問題をより扱いやすいものに分解することです。したがって、2 つの間隔を比較する問題に取り組む前に、2 つのカレンダーの日付を比較するというより単純な問題に取り組んでみてください。2 つの日付aとが与えられた場合、が より前bの場合は true を返し、それ以外の場合は false を返す関数を作成してみてください。そう、ab

; 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?。特に、次の点を考慮してください。2 つの間隔が重ならない場合、一方の終了日は他方の開始日よりも前になります。

最後に、エッジ ケースを考えてみます。たとえば、(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 に答える