日本語 · English

split — 親窓の可変分割(従属窓)

分類: 窓生成語(premise 層) / シグネチャ: split(g) by: u : Stream(windowed) -> Stream(partitioned) / 名は確定(spec §5.4)

意味

親窓を、g = y => [幅…] が返す幅リストで連続部分窓へ割る(トップダウン分割)。y は親窓の 窓列通し序数(F60 座標)、by: u は幅の単位(必須)。検査は per-instance で二本(ADR-48): 境界整合(親窓の両端が u の窓境界に一致——暦年×週のような非整列はここで弾かれる)と I5 総和(幅リストの総和=親窓内の u 個数・不一致は明示エラー)。

親・by: とも、パーティション窓に加えて規則マーカー由来の実効パーティション(覆域註釈のない segmentBy 製窓列——標準 weekisoWeekisoYear がそれ)を受ける(ADR-48・F109)。データ由来 (covering 付き)マーカーの窓列・empties: drop の窓列・cycle は受理しない——覆域の編集で g の 引く序数が黙って動くため(誘導文言つきの静的エラー・正準は segmentBy 形)。

span(ボトムアップ)が基本の括りを作るのに対し、split従属窓を作る——親の変化に自動追従 させたい窓に使う。Gregorian の quarter が代表:

quarter = year split (_ => [3, 3, 3, 3]) by: month

会計暦(withyear を組み替え)の下では、この継承定義が新しい year に自動追従して 会計四半期になる(機構 A。with)。

年を前期・後期に割る:

# eval: 2026-01-01..2027-01-01
premise H = Gregorian with { half = year split (_ => [6, 6]) by: month }
premise JPH { calendar-system: H; tz: "Asia/Tokyo"; wkst: Mon }
@JPH
everyDay |> within(half) |> first
#=> 2026-01-01 2026-07-01

四半期の初日(標準の quarter):

# eval: 2026-01-01..2027-01-01
@JP
everyDay |> within(quarter) |> first
#=> 2026-01-01 2026-04-01 2026-07-01 2026-10-01

label:(ADR-34)

split … by: u label: (p => 式) で各部分窓にラベルを貼れる(p=窓の先頭点・射影時の遅延評価。 詳細は span の同節と ADR-34)。

週の平日部と週末部(segmentBy 製の標準 week を親にする例・ADR-48):

# eval: 2026-01-05..2026-01-19
premise W5 = Gregorian with { weekPart = week split (_ => [5, 2]) by: day }
premise JPW { calendar-system: W5; tz: "Asia/Tokyo"; wkst: Mon }
@JPW
everyDay |> within(weekPart) |> first
#=> 2026-01-05 2026-01-10 2026-01-12 2026-01-17

落とし穴

関連

spangridsegmentBy(実効パーティションの供給源)・with(自動追従の実例)・I5・ADR-48。