ここでは日付型をsrfi-19ライブラリの<date>型として扱います。 srfi-19ライブラリを使用するためには、あらかじめ(use srfi-19)を評価させておく必要があります。
まず共通の処理として、月と年を与えてその月の1日を求めるmake-month手続きを書いておきます。
(define (make-month m y)
(make-date 0 0 0 0 1 m y (date-zone-offset (current-date))))
(date-zone-offset (current-date))でデフォルトのゾーンオフセットを求めています。
<date>型の値を与えてその日付の月の最初の日を求めるには次の手順で行います。
- その日付の月の値と年の値を求める
- 1で求めた月の値と年の値を使って、その月の1日の日付を生成する
「<date>型の値を生成する」で見たように、ある日付の月の値を得るにはdate-month手続きが使え、ある日付の年の値を得るにはdate-year手続きが使えました。
上に書いたmake-month手続きを使うと、任意の日付dateを与えてその月の最初の日を生成するfist-day-of-month手続きは次の通りに書けます。
(define (first-day-of-month date)
(make-month (date-month date) (date-year date)))