epochOrdinal — 紀元からの通し序数
分類: 射影(値式・本体層 core) / シグネチャ: epochOrdinal(u, d) : 点 -> 数値 / 名は確定(RC2・spec §5.4)
意味
点 d が属する u 窓の、紀元からの通し序数(0 起点)を返す。ordinalIn の
枠を紀元にした版で、窓ごとにリセットされない一本の座標。premise 層の窓生成語 span が受け取る
「生成中の窓の序数 n」と同じ座標である(monthOf(m) = m mod 12 が m=0=紀元月で成立する)。
紀元は言語既定で 1970-01-01T00:00(在圏 tz)。別基準の暦法は原始的定義のメンバー epoch: で
上書きできる(利用側の前文には置けない。ADR-31)。
例
隔月・偶数序数の月(1970-01 起点なので 1 月・3 月…が偶数)の初日:
# eval: 2026-01-01..2026-04-01
@JP
everyDay |> filter(d => epochOrdinal(month, d) mod 2 == 0) |> within(month) |> first
#=> 2026-01-01 2026-03-01
「12 で割った剰余」は暦月の位置——1 月だけを選ぶ:
# eval: 2026-01-01..2027-01-01
@JP
everyDay |> filter(d => epochOrdinal(month, d) mod 12 == 0) |> within(month) |> first
#=> 2026-01-01
落とし穴
- 0 起点(序数座標)。「第 N」を答える
ordinalInは 1 起点——役割が違う。 - 序数の絶対値は紀元に依存する。式には剰余・差分で使い、生の値をスケジュールの意味に直接埋めない のが安全(紀元を替えても壊れない)。
- 「隔週」「隔月」のような周期の表現に向く。単発の座標指定は窓インスタンス参照
year(2020)(spec §4.9・ADR-42)。 - データ由来窓(
segmentByの窓)——窓列が紀元まで届かない場合は「存在する最初の窓 = 0」 (ADR-31 改訂・F60 で確定)。生の添字引きlist[epochOrdinal(w, d)]は値式として合法のままだが 非正準——並行リストを窓列に結ぶ正準形はsegmentByのlabels:(ADR-39。 同長検査つき。stdlib の Kyureki は移行済み)。なおlabels:の窓列序数は常に 0 起点で、 紀元を跨ぐ歴史データでは epochOrdinal と別座標になる(相乗りしない)。