日本語 · English

span — 単位列の可変集約(ボトムアップ)

分類: 窓生成語(premise 層) / シグネチャ: span(f) : Stream -> Stream(partitioned)・位相は phase: / 名は確定(spec §5.4)

意味

細かい単位の列を、f = n => 個数 に従って連続窓へ束ねる(ボトムアップ集約)。n は生成中の窓の 紀元起点の序数(0 起点。epochOrdinal と同じ座標)で、個数は可変 (month の 28〜31 日)でも定数(year の 12 か月)でもよい。phase: は束ね始めの位相 (会計暦の 4 月始まりは phase: 3)。

Gregorian の背骨はこの語で立っている——依存はボトムアップが主day → month → year):

month = day   span daysInMonth        # 日数は値式(閏は「窓でなく値」)
year  = month span (_ => 12) phase: 0 # 標準ラベル label: は省略(完全形は stdlib/gregorian.md §1)

「2 月が 28 日か 29 日か」を year への依存にせず、月序数 m からの計算 (daysInMonth)にするのが要——これで monthyear に依存せず、派生(会計暦)で year を 組み替えても循環しない(spec §3.6)。

5 日ごとの窓(定数 span。紀元からの 5 日刻みなので 2026 年では 1/2 起点になる):

# eval: 2026-01-01..2026-01-20
premise P5 = Gregorian with { pentad = day span (_ => 5) }
premise JP5 { calendar-system: P5; tz: "Asia/Tokyo"; wkst: Mon }
@JP5
everyDay |> within(pentad) |> first
#=> 2026-01-02 2026-01-07 2026-01-12 2026-01-17

会計年度(4 月始まり)は phase: の代表例——with を参照。

label:(ADR-34)

span … label: (p => 式) で各窓にラベルを貼れる。p は窓の先頭点、意味論は 名前(d) ≡ 付与式(d の属する窓の先頭点)(射影時・遅延評価)。年度ラベルの正準形 year = month span (_ => 12) phase: 3 label: (p => yearNo(p))../stdlib/fiscal.md §1(完全定義に昇格済み)。

落とし穴

関連

gridsplitwithphase: ずらしの実例)・ rephase(span 位相ずらしへの糖衣)・紀元(ADR-31)。